Vraag Hoe kom ik te weten wie een toegangsfout veroorzaakt?


Ik krijg meldingen dat mijn app GPF veroorzaakt op sommige Vista-computers. De foutmelding is ongeveer als volgt:

toegangsfout op 0x75784062 (geprobeerd te schrijven naar 0x00000006)

Om dit op te lossen, moet ik eerst precies weten wie deze GPF veroorzaakt: mijn hoofdexe, een derde partijcomponent, een van mijn eigen ActiveX-componenten, een dll, enz ...

Hoe kan ik dit uitvinden? Welke hulpmiddelen kunnen de exacte module identificeren die deze puinhoop heeft veroorzaakt?

Alle hulp zou zeer op prijs worden gesteld.

PS Mijn app is gecodeerd in VB6 en mijn activex-besturingselementen zijn geschreven in Delphi 2007.


11
2018-01-27 18:59


oorsprong


antwoorden:


Mijn suggestie zou zijn om MadExcept te proberen verbind tekst of Eurekalog verbind tekst . Deze vangen de niet-verwerkte uitzondering op en produceren een stackdump op het punt waar het probleem optreedt.

Geen link naar deze andere dan als een tevreden klant. MadExcept heeft me in staat gesteld om enkele zeer zeldzame problemen in mijn programma's op te sporen en te elimineren.


10
2018-01-27 21:54



Ik zou een of andere uitzondering-haak aanraden, zoals Eurekalog of madExcept dat geeft je een leuke callstack wanneer uitzonderingen optreden.

Nu wil dit je nu veel helpen, of gewoon ...

Ik heb geen geluk gehad met het dialoogvenster 'Zoek fout'. Over het algemeen is een consistent geval van falen en veel stappen de enige / snelste / gemakkelijkste oplossing. Als het een geval van niet-geïnitialiseerde aanwijzer of bevrijd object betreft, kan FastMM4 u helpen met de juiste instellingen.


3
2018-01-27 21:57



Wanneer het programma crasht, zou Windows een a moeten opslaan crash dump. U kunt dit vervolgens laden in WinDbg of, bij een mep, Visual Studio. Er zijn verschillende manieren om de dump te analyseren om erachter te komen wat er mis ging. Om je op weg te helpen:


1
2018-01-27 19:04



Installeren Debug Diag en controleer uw app, hij genereert DUMP-bestanden voor u en analyseert.


1
2018-01-27 19:29



U kunt Process Monitor of Process Explorer gebruiken, beide uit de Sysinternals plaats.


0
2018-01-27 19:15



Het opsporen van AV's kan moeilijk zijn omdat de echte reden zich mogelijk niet op hetzelfde punt bevindt als waar de uitzondering zich daadwerkelijk voordoet. Enkele algemene tips:

  1. Kijk naar het adres. DLL's (inclusief ActiveX / OCX) worden hoger geladen adres, meestal meer dan 0x50000000 (systemm DLL's zijn meestal in 0x70000000 tot 0x78000000). Het ziet er naar uit dat je AV gebeurt in een DLL. Vergeet niet dat in de nieuwste versie van Windows-adresruimtebelastingsverdeling de adressen voor elke run kunnen worden gewijzigd
  2. Een oproepstapel is erg waardevol om te begrijpen hoe de code bij de AV terechtkwam. Naast EurekaLog en MadExcept hebben de JCL / JVCL-bibliotheken het nuttige om die informatie te verkrijgen. Mogelijk moet u compileren met meer debuginformatie (en kaartbestanden) om een ​​bruikbare call stack te krijgen.
  3. Delphi heeft een Goto-adresdebuggingfunctie waarmee een toepassing kan worden geladen, in de foutopsporing kan worden onderbroken en vervolgens naar een adres kan worden gesprongen. Maar het vereist dat het adres ondertussen niet is gewijzigd (opnieuw compileren met wijziging zal waarschijnlijk het adres veranderen, en randomisatie zal het ook doen).
  4. Als de fout niet repliceerbaar is op uw ontwikkelmachine, kunt u proberen de debugger op afstand te debuggen om een ​​toepassing op een andere machine te debuggen.

0
2018-05-21 10:01