Delphi > Obecné

ladění v Turbo Delphi

(1/3) > >>

frankee:
ahoj,
dělám program, který má chybu a padá..  Je to chyba, že je nutno restartnout celý komp s win64, takže paráda,
ještě lepší je, že program se kousne po cca hodině a půl provozu a Turbo Delphi mě hodí ne někam do kódu, ale
vyhodí okno "CPU" kde ať dělám co dělám, nic nezjistím...

A) Je ladění v Delphi XE lepší ? (mám koupené delphi XE a zatím jsem se nedokopal k tomu abych celou tu VĚC přepsal) 
B) ví někdo jak lépe odhalovat zhroucení programu ? (používám logování výjimek do souboru, zkoušel jsem GP profiler. Ten vyhodí nějaká dvě čísla u kterých jsem ale nezjistil co znamenají. )
C) Jak zjišťujete chyby v alokování / uvolňování zdrojů (Pořád mi roste paměť co program spotřebovává) ?
D) znáte nějaký dobrý profiler ? Nebo používáte něco, co umí ukázat program rozpadený na vlákna, a zatížení procesoru jednotlivým vláknem ?

Ještě přidám informaci, že používám volání knihovny z C, která se jmenuje BASS... Celé to zpracovává zvuk na více zvukovek,
je to vícevláknové a složeno z objektů, které mezi sebou fungují víceméně samostatně (akorát si posílají události)
bohužel projekt již zřejmě svou velikostí přesáhl únosnou míru co lze uržet v hlavě a navíc při namnožení mnoha instancí objektu se projevují postraní efekty jinak velmi výhodné multiplikace.

V turbo delphi mám všecken debuging zaplý,

díky Petr

pepak:

--- Citace: frankee  21-06-2012, 08:32:16 ---B) ví někdo jak lépe odhalovat zhroucení programu ? (používám logování výjimek do souboru, zkoušel jsem GP profiler. Ten vyhodí nějaká dvě čísla u kterých jsem ale nezjistil co znamenají. )
--- Konce citace ---
Pro něco takového se typicky používají různé speciální knihovny, které kromě typu výjimky a adresy, kde nastala, vypíšou více či méně užitečné info o okolnostech výjimky. Já třeba používám EurekaLog, který ti vypíše velmi podrobný stack trace (ze které unity se to volalo, z jaké její funkce a z jakého řádku té funkce), přidá parametry procesu (kdo byl přihlášen, jaké moduly jsou v paměti) a spoustu dalších věcí a celé to třeba pošle na e-mail. Existují i další podobné knihovny. Jestli některá z nich funguje s Turbo Delphi, nevím.


--- Citace ---C) Jak zjišťujete chyby v alokování / uvolňování zdrojů (Pořád mi roste paměť co program spotřebovává) ?
--- Konce citace ---
Pokud máš kód napsaný tak, že to nenajdeš na první pohled, a současně to roste tak moc, že stojí za to to řešit, tak použij nějaký alternativní memory manager, jako například FastMM - prakticky všechny ti umožní hlídat, která alokovaná paměť nebyla dealokována a odkud se alokovala. O použitelnosti pro Turbo Delphi platí totéž, co výše - nevím.

Radek Červinka:

--- Citace ---
A) Je ladění v Delphi XE lepší ? (mám koupené delphi XE a zatím jsem se nedokopal k tomu abych celou tu VĚC přepsal) 


--- Konce citace ---
To každopádně.

--- Citace ---
B) ví někdo jak lépe odhalovat zhroucení programu ? (používám logování výjimek do souboru, zkoušel jsem GP profiler. Ten vyhodí nějaká dvě čísla u kterých jsem ale nezjistil co znamenají. )

--- Konce citace ---
Dost jsem se tomu na delphi.cz věnoval. Velmi pomůže FastMM a FullDebugMode. Popřípadě http://www.eurekalog.com/

--- Citace ---
C) Jak zjišťujete chyby v alokování / uvolňování zdrojů (Pořád mi roste paměť co program spotřebovává) ?

--- Konce citace ---
FastMM4 a FullDebugMode


--- Citace ---
D) znáte nějaký dobrý profiler ? Nebo používáte něco, co umí ukázat program rozpadený na vlákna, a zatížení procesoru jednotlivým vláknem ?

--- Konce citace ---

Zkus http://delphitools.info/samplingprofiler/ , opět jsem se tomu na delphi.cz věnoval

FastMM a SamplingProfiler by měl být podporován i normální TurboVerzí, jak je to s tou neplacenou nevím.

frankee_:
tak mi to vyhodilo toto,
da se s tim neco vymyslet ?


FastMM has detected an error during a free block scan operation. FastMM detected that a block has been modified after being freed.

Modified byte offsets (and lengths): 720(1), 2696(1)

The previous block size was: 2792

This block was previously allocated by thread 0x12F8, and the stack trace (return addresses) at the time was:
402F12 [system.pas][System][@GetMem][2648]
4043FF [system.pas][System][TObject.NewInstance][8824]
404786 [system.pas][System][@ClassCreate][9489]
4B1139 [radio.pas][radio][TRadio.Create]
4B62B9 [radio_list.pas][radio_list][InicializaceRadioListu][178]
4CB272 [astra_main.pas][astra_main][TForm1.FormCreate][1418]
4707B3 [Forms.pas][Forms][TCustomForm.DoCreate][2756]
4703FB [Forms.pas][Forms][TCustomForm.AfterConstruction][2680]
4047F4 [system.pas][System][@AfterConstruction][9537]
4703C7 [Forms.pas][Forms][TCustomForm.Create][2676]
764762FA [Unknown function at gapfnScSendMessage]

The block was previously used for an object of class: TRadio

The allocation number was: 5791

The block was previously freed by thread 0x12F8, and the stack trace (return addresses) at the time was:
402F2E [system.pas][System][@FreeMem][2693]
40441D [system.pas][System][TObject.FreeInstance][8830]
4047D1 [system.pas][System][@ClassDestroy][9530]
463D67 [Controls.pas][Controls][TCustomControl.Destroy][10010]
404463 [system.pas][System][TObject.Free][8849]
4CB4F9 [astra_main.pas][astra_main][TForm1.FormDestroy][1476]
47082F [Forms.pas][Forms][TCustomForm.DoDestroy][2768]
470676 [Forms.pas][Forms][TCustomForm.BeforeDestruction][2730]
404830 [system.pas][System][@BeforeDestruction][9565]
470687 [Forms.pas][Forms][TCustomForm.Destroy][2734]
423AAD [classes.pas][Classes][TComponent.DestroyComponents][10453]

The current thread ID is 0x12F8, and the stack trace (return addresses) leading to this error is:
40C99E [FastMM4.pas][FastMM4][FinalizeMemoryManager][11077]
40CA0E [FastMM4.pas][FastMM4][Finalization][11167]
404F53 [system.pas][System][FinalizeUnits][11273]
4051EB [system.pas][System][@Halt0][11943]
4D0C5E
7549339A [BaseThreadInitThunk]
77619EF2 [Unknown function at RtlInitializeExceptionChain]
77619EC5 [Unknown function at RtlInitializeExceptionChain]

Current memory dump of 256 bytes starting at pointer address 7EF3F6B0:
10 AE 4D 00 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
.  ®  M  .  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €
€  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €

Radek Červinka:
No objekt byl uz predtim uvolnen v destruktoru astra_main.
A pak se k nemu snazis pristupovat (FastMM detected that a block has been modified after being freed) .
Objekt je TRadio.

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi