Ik zit al enige weken met het probleem dat in een stuk code dat ik geschreven heb zo af en toe een overrun op een datastructuur op de heap plaatsvindt, wat een waarschuwing (assert in de 'free' code van VC) danwel crash oplevert (tja, er wordt toch wat nuttige data overschreven
).
Het daadwerkelijke probleempunt kan ik echter maar niet vinden:
- ik heb 2 testen waarbij het probleem reproduceerbaar is in het merendeel van de keren dat ik ze executeer
- in de 'productie' code heb ik er geen last van terwijl het gebruik daar nauwelijks afwijkt van de 2 testen. Er wordt dan echter van een echte file gelezen ipv een stub, wat invloed heeft op de timing.
- onder Linux treedt het probleem niet op (althans geen warning/crash), terwijl het onder Windows (VC6) met grote regelmaat reproduceerbaar is
- het geheel draait in een aantal threads zodat timing essentieel is
- bij debuggen in step mode treedt het probleem niet op (timing?)
- de fout komt vrijwel altijd bovendrijven bij dezelfde delete operatie (waar op zich zelf niets mis mee is, er gaat een VC assert af)
Ik ben al met Numega DevPartner bezig geweest en die geeft wel aan dat er een overrun plaatsvindt, maar 'te laat' zodat ik nog niet weet waar het stuk geheugen nou overschreven wordt. (Bij deze check controleert devpartner of een paar controlebytes na elk block niet overschreven zijn bij een delete en nog wat andere memory zaken.)
Devpartner ondersteunt ook een zgn adaptive analysis die vaker de controle bytes controleert, maar dat levert ook niets bruikbaars op.
De zwaarste check van Devpartner levert ook niets bruikbaars op en kan bovendien niet vaak gebruikt worden aangezien deze veels te traag werkt (onbruikbaar traag zelfs).
Ik heb ook op een heleboel plaatsen al assert(_heapchk() == _HEAPOK) ingevoegd, maar dat werkt ook niet om het probleem te localiseren. Het komt zelfs voor dat een regel na de assert, met de betreffende delete, een fout rapporteert terwijl de assert geldig is.
Lang verhaal, maar korte vraag: heeft iemand een idee wat voor een andere tool(s) of technieken ik kan gebruiken om overrun(s) eruit te halen. Ik ben eigenlijk maar een prutser die zo goed mogelijk dmv tools, tfm, en google dit probeert te fixen, maar ben benieuwd hoe een prof pw-er dit aanpakt
Het daadwerkelijke probleempunt kan ik echter maar niet vinden:
- ik heb 2 testen waarbij het probleem reproduceerbaar is in het merendeel van de keren dat ik ze executeer
- in de 'productie' code heb ik er geen last van terwijl het gebruik daar nauwelijks afwijkt van de 2 testen. Er wordt dan echter van een echte file gelezen ipv een stub, wat invloed heeft op de timing.
- onder Linux treedt het probleem niet op (althans geen warning/crash), terwijl het onder Windows (VC6) met grote regelmaat reproduceerbaar is
- het geheel draait in een aantal threads zodat timing essentieel is
- bij debuggen in step mode treedt het probleem niet op (timing?)
- de fout komt vrijwel altijd bovendrijven bij dezelfde delete operatie (waar op zich zelf niets mis mee is, er gaat een VC assert af)
Ik ben al met Numega DevPartner bezig geweest en die geeft wel aan dat er een overrun plaatsvindt, maar 'te laat' zodat ik nog niet weet waar het stuk geheugen nou overschreven wordt. (Bij deze check controleert devpartner of een paar controlebytes na elk block niet overschreven zijn bij een delete en nog wat andere memory zaken.)
Devpartner ondersteunt ook een zgn adaptive analysis die vaker de controle bytes controleert, maar dat levert ook niets bruikbaars op.
De zwaarste check van Devpartner levert ook niets bruikbaars op en kan bovendien niet vaak gebruikt worden aangezien deze veels te traag werkt (onbruikbaar traag zelfs).
Ik heb ook op een heleboel plaatsen al assert(_heapchk() == _HEAPOK) ingevoegd, maar dat werkt ook niet om het probleem te localiseren. Het komt zelfs voor dat een regel na de assert, met de betreffende delete, een fout rapporteert terwijl de assert geldig is.
Lang verhaal, maar korte vraag: heeft iemand een idee wat voor een andere tool(s) of technieken ik kan gebruiken om overrun(s) eruit te halen. Ik ben eigenlijk maar een prutser die zo goed mogelijk dmv tools, tfm, en google dit probeert te fixen, maar ben benieuwd hoe een prof pw-er dit aanpakt