Autor Téma: Nástroj na detekciu porušenej pamäti  (Přečteno 91 krát)

Offline Miroslav Baláž

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Nástroj na detekciu porušenej pamäti
« kdy: 11-07-2018, 00:00:12 »
Nástroj na zistenie miesta porušenia pamäti? Strážca pamäti? Neviete o takom?
Využívam System.Zip.TZipFile na rozbaľovanie archívov s desiatkami súborov.
Presnejšie ZipRead.Read do TBytes. Položky archívu sú kódované ako UTF-8, používam PAnsiChar. Po rozbalení každú položku hneď analyzujem.
Desiatky archívov bežali v poriadku, až som narazil na jeden archív (rozsahom malý), kde mi konkrétne jedna z rozbaľovaných položiek zahlási AV ( presne pri zip_file.Read ).
V prípade, že pri problémovom archíve zmením poradie rozbaľovania súborov, úloha prebehne v poriadku.
Viem ktoré dve položky vzájomne spôsobia chybu. Neviem však nájsť presné miesto, kde sa poruší pamäť. V rámci analýzy pred AV je niekde zjavne problém..
Ak by existoval nejaký nástroj, ktorý by naznačil, kde v rámci kódu mohlo dôjsť k chybe, dosť by mi to pomohlo..

Orientačný kód:
Kód: Delphi [Vybrat]
  1. //deklarácia
  2. BytesX               : TBytes; //
  3. ..
  4. // zip_file create a open
  5. ,,
  6. // cyklus --------------------------------------
  7. // rozbalenie položky srcItem z archívu. Archív má celkove desiatky položiek
  8. zip_file.Read( srcItem, BytesX );
  9. // Analýza
  10. ..
  11. // na záver analýzy
  12. SetLength( BytesX, 0 );
  13. // pokračuje sa na ďalšiu položku
  14. // koniec cyklu --------------------------------------
  15. ..
  16. // koniec programu
  17. // zip_file close and free
  18.  


« Poslední změna: 11-07-2018, 00:31:30 od Miroslav Baláž »

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1980
  • Karma: 85
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nástroj na detekciu porušenej pamäti
« Odpověď #1 kdy: 11-07-2018, 09:42:55 »
EurekaLog, nebo FastMM v modu FullDebug https://delphi.cz/post/Detekce-problemu-za-pomoci-FastMM4.aspx a https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx

Není nahodou ten zip poskozeny, sifrovany nebo nemaji ty soubory nulovou delku?
Embarcadero MVP - Czech republic

Offline Miroslav Baláž

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Nástroj na detekciu porušenej pamäti
« Odpověď #2 kdy: 11-07-2018, 10:22:25 »
EurekaLog, nebo FastMM v modu FullDebug https://delphi.cz/post/Detekce-problemu-za-pomoci-FastMM4.aspx a https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx
..
1. Ďakujem, niečo také som hľadal

..
Není nahodou ten zip poskozeny, sifrovany nebo nemaji ty soubory nulovou delku?
2. Nie manuálne som overil už včera. Z rôznych hľadísk.

3. Prišiel som na chybu. Hlavné bolo zamyslieť sa z odstupom času a s chladnou hlavou..
Vizuálne som preveril predchádzajúci súbor. Našiel som tam neštandardné informácie. Spôsobili zápis až za dimenzovaný rozsah poľa.
Ošetrím to. Radšej ešte pridám bezpečnosť a malo by to bežať.

Ten typ archívu bol experimentálny, pravdepodobnosť v reálnom svete ani nie promile..
Preto som daný stav nemal podchytený.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: