Jak vytvořit vlastní debugger?

Jak vytvořit vlastní debugger?
« kdy: 01. 11. 2019, 21:47:38 »
Dostal se mi do rukou jeden interpreter. Konkrétne tento http://www.hansamanuals.com. Je v nej už neco naprogramováno a já řeším úpravy. Pro debug jsou akorát  alert okna nebo zápis do *.log souboru. No je to náročné. Tak vymýšlím jestli bych neudelal jednoduchý debuger. Neco jako vem řádek, vykonej, a ukaž všechny vnitřní promenné.

Rešil nekdo z vás neco podobné jinde?
« Poslední změna: 02. 11. 2019, 01:06:41 od Petr Krčmář »


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Jak vytvořit vlastní debugger?
« Odpověď #1 kdy: 02. 11. 2019, 15:22:01 »
Neřešil. Ale je to zajímavé téma.

Co třeba umožnit registrovat pozorovatele ve stylu AOP. Tedy můžeš si zaregistrovat jednu nebo více funkcí na místo určené selektorem. Něco jako breakpoint. Když kód přijde na to místo, tak té funkci předá aktuální stav (nutné deepclone). To by nešlo?
Samozřejmě když by si chtěl sledovat všechno, tedy plnohodnotný debuger, tak by se dal selektor na hvězdičku.

Re:Jak vytvořit vlastní debugger?
« Odpověď #2 kdy: 02. 11. 2019, 16:28:45 »
Teda nevím, ale za dob, kdy jsem programoval v PHP jsem si vystačil s příkazem print_r a die. Bez debuggeru.

Zápis do log souboru je požehnaný debugovací nástroj.

Re:Jak vytvořit vlastní debugger?
« Odpověď #3 kdy: 02. 11. 2019, 16:34:03 »
Dostal se mi do rukou jeden interpreter. Konkrétne tento http://www.hansamanuals.com. Je v nej už neco naprogramováno a já řeším úpravy. Pro debug jsou akorát  alert okna nebo zápis do *.log souboru. No je to náročné. Tak vymýšlím jestli bych neudelal jednoduchý debuger. Neco jako vem řádek, vykonej, a ukaž všechny vnitřní promenné.

Rešil nekdo z vás neco podobné jinde?

Eh... cože? :-)

Obecná odpověď = chcete vyrobit source-level debugger pro nějaký interpretovaný jazyk. To by znamenalo jednu ze dvou možností:

A) nemáte zdrojáky od toho interpretru. V tom případě byste musel reimplementovat cca celý ten interpreter, pokud se má jednat o source-level debugging. A potažmo pak neladíte korektnost programu v proprietárním interpretru, ale ve Vašem reimplementovaném prostředí...

B) máte zdrojáky od toho interpretru. V tom případě se zanořte do vnitřností, a dopište do runtime prostředí nějaké ladící okno, které Vám bude ukazovat např. celý namespace (nebo těch několik dílčích namespaces = globální, lokální, co já vím), bude sledovat "aktuální pozici v programu" (něco jako instruction pointer) a umožní Vám se ve vnitřnostech toho interpretru hrabat. Pokud je to interpretované přímo řádku po řádce, je to ta jednodušší varianta. Nebo ještě pokud se to zkompiluje do "mezipodoby" = do nějakého stromu binárních objektů, jako to dělá Perl 5 - to by taky ještě šlo. Pokud se to zkompiluje do nějakého bytekódu ala Java (pro register-based virtual machine = ztratí se původní struktura programu), tak byste v tom bytekódu musel mít "ladící informace" (odkazy na řádky zdrojáku).

Konkrétně pokud se týče HansaWorld... to je celý nějaký ERP balík!? K tomu nebudou zdrojáky... Podle mého je to celé halucinace. Ledaže byste se dopátral, že má ten runtime nebo IDE nějaké dokumentované ladící API, proti kterému si můžete něco svého doprogramovat...

To je zajímavé. Býval bych si u Vás tipnul, že si tuhle odpověď dáte dohromady sám. Pořád koukám, kde jsem špatně pochopil otázku...

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #4 kdy: 02. 11. 2019, 17:05:41 »
Neřešil. Ale je to zajímavé téma.

Co třeba umožnit registrovat pozorovatele ve stylu AOP. Tedy můžeš si zaregistrovat jednu nebo více funkcí na místo určené selektorem. Něco jako breakpoint. Když kód přijde na to místo, tak té funkci předá aktuální stav (nutné deepclone). To by nešlo?
Samozřejmě když by si chtěl sledovat všechno, tedy plnohodnotný debuger, tak by se dal selektor na hvězdičku.

jestli je to interpret, breakpoint jde realizovat eval smyckou


Re:Jak vytvořit vlastní debugger?
« Odpověď #5 kdy: 02. 11. 2019, 18:11:20 »
Neřešil. Ale je to zajímavé téma.

Co třeba umožnit registrovat pozorovatele ve stylu AOP. Tedy můžeš si zaregistrovat jednu nebo více funkcí na místo určené selektorem. Něco jako breakpoint. Když kód přijde na to místo, tak té funkci předá aktuální stav (nutné deepclone). To by nešlo?
Samozřejmě když by si chtěl sledovat všechno, tedy plnohodnotný debuger, tak by se dal selektor na hvězdičku.

jestli je to interpret, breakpoint jde realizovat eval smyckou

Přesně tak, mohlo by jít místo načtení kódu ze souboru jej načítat interaktivně z nějaké konzole. Tak to lze leckdy odladit interaktivněji, než pouhým logem do souboru.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #6 kdy: 02. 11. 2019, 19:10:39 »
Místo debugu zkus raději testy jednotek. Aspoň to nebudeš muset ladit ručně.

PanVP

Re:Jak vytvořit vlastní debugger?
« Odpověď #7 kdy: 02. 11. 2019, 23:37:07 »
OT: Psal už někdo z vás vlastní interpret?
Například pro Basic, Pascal, Lua nebo něco podobného?

Docela rád bych si jeden takový napsal (taková specialitka) a pár rad by se hodilo.

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #8 kdy: 03. 11. 2019, 08:54:10 »
Neřešil. Ale je to zajímavé téma.

Co třeba umožnit registrovat pozorovatele ve stylu AOP. Tedy můžeš si zaregistrovat jednu nebo více funkcí na místo určené selektorem. Něco jako breakpoint. Když kód přijde na to místo, tak té funkci předá aktuální stav (nutné deepclone). To by nešlo?
Samozřejmě když by si chtěl sledovat všechno, tedy plnohodnotný debuger, tak by se dal selektor na hvězdičku.

jestli je to interpret, breakpoint jde realizovat eval smyckou

Přesně tak, mohlo by jít místo načtení kódu ze souboru jej načítat interaktivně z nějaké konzole. Tak to lze leckdy odladit interaktivněji, než pouhým logem do souboru.

já to myslel naopak, vložit eval smyčku do bodu breakpointu.

v pythonu neco takoveho

Kód: [Vybrat]
while True:
    s = input()
    if s == 'c':
        break
    print(eval(s))

ale je k nicemu, lepsi pouzit pdb
« Poslední změna: 03. 11. 2019, 09:00:47 od gill »

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #9 kdy: 03. 11. 2019, 09:33:16 »
OT: Psal už někdo z vás vlastní interpret?
Například pro Basic, Pascal, Lua nebo něco podobného?

Docela rád bych si jeden takový napsal (taková specialitka) a pár rad by se hodilo.

in-house vyvýjené interprety jsou zlo, jak ukazuje tato diskuze.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #10 kdy: 03. 11. 2019, 10:12:55 »
OT: Psal už někdo z vás vlastní interpret?
Například pro Basic, Pascal, Lua nebo něco podobného?

Docela rád bych si jeden takový napsal (taková specialitka) a pár rad by se hodilo.

in-house vyvýjené interprety jsou zlo, jak ukazuje tato diskuze.

To se týká jen univerzálních interpretů. Pokud jsou však doménově specifické, mohou být velmi praktické a užitečné.

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #11 kdy: 03. 11. 2019, 10:23:33 »
To se týká jen univerzálních interpretů. Pokud jsou však doménově specifické, mohou být velmi praktické a užitečné.

nemohou, nikdy se nedostanete na úroveň zavedených interpretů, co se týče dokumentace, odladěnosti, podpory v nástrojích třetích stran

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #12 kdy: 03. 11. 2019, 11:35:43 »
OT: Psal už někdo z vás vlastní interpret?
Ano, psal. Ono to není nic složitého, implementovat parser a interpretaci je primitivní, složitější může být sofistikovaná sémantická analýza apod., ale ta se dá dělat iterativně nebo dopsat později.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Jak vytvořit vlastní debugger?
« Odpověď #13 kdy: 03. 11. 2019, 11:51:21 »
To se týká jen univerzálních interpretů. Pokud jsou však doménově specifické, mohou být velmi praktické a užitečné.

nemohou, nikdy se nedostanete na úroveň zavedených interpretů, co se týče dokumentace, odladěnosti, podpory v nástrojích třetích stran

Pokud zavedené interprety nesplňují mé doménové požadavky, tak mi nezbývá nic jiného, než si napsat vlastní. Není to tak složité, jak to vypadá. Pár desítek či stovek řádek se dá napsat třeba i za hodinu.

Re:Jak vytvořit vlastní debugger?
« Odpověď #14 kdy: 03. 11. 2019, 15:42:34 »
Neřešil. Ale je to zajímavé téma. Co třeba umožnit registrovat pozorovatele ve stylu AOP. Tedy můžeš si zaregistrovat jednu nebo více funkcí na místo určené selektorem. Něco jako breakpoint. Když kód přijde na to místo, tak té funkci předá aktuální stav (nutné deepclone). To by nešlo?
Samozřejmě když by si chtěl sledovat všechno, tedy plnohodnotný debuger, tak by se dal selektor na hvězdičku.
jestli je to interpret, breakpoint jde realizovat eval smyckou
Přesně tak, mohlo by jít místo načtení kódu ze souboru jej načítat interaktivně z nějaké konzole. Tak to lze leckdy odladit interaktivněji, než pouhým logem do souboru.
já to myslel naopak, vložit eval smyčku do bodu breakpointu. V pythonu neco takoveho
Kód: [Vybrat]
while True:
    s = input()
    if s == 'c':
        break
    print(eval(s))

Nebo tak. Pokud se někam zapisují skripty, které pak aplikace vyhodnocuje, může ten skript sám provádět eval. Ale je to jen rychlý hack který nemusí vždy vyhovovat...