2017-11-22 3 views
-1

Ich schreibe einen funtion, die einen NULL-Zeiger wie folgt zugreifen:Laden DMP-Datei den Fehlercode zu finden, aber der Absturz auftritt, in einem unerwarteten Ort (in ntdll.dll)

CORRUPTDLL_API int fncorruptDLL(void) 
{ 
    int *p = NULL; 
    printf("%d\n", p[0]); 
    return 0;  
} 

und diese dann rufen Funktion in Hauptfunktion wie folgt aus:

int main() 
{ 
    fncorruptDLL(); 
    return 0; 
} 

wie erwartet, bricht es in der „printf“ Funktion und ich kann die Absturzstelle aus dem Stapelrahmen crash place deutlich zu sehen.

Dann benutze ich „WinDbg“ a „DMP“ Datei zu erstellen und es mit VS2015 öffnen, beginnen zu debug.It eine Seite stellt sich heraus, die ‚keine Quelle verfügbar‘ zeigt page während ich habe bereits die richtige“geladen. pdb "file und setze den Quellcodepfad wie folgt: set source code path.

Warum sollte dies geschehen? Ich meine es nicht in meiner Funktion habe laufen, kann ich den Absturz nur sehen, in „ntdll.dll“ (aus Stapelrahmen) .Aber ich bin nicht mit Montage language.Does vertraut dieses " .dmp "Datei funktioniert wirklich?

ich verwendet, um die „adplus“, um die Datei excutable

C:\Program Files (x86)\Debugging Tools for Windows (x86)\adplus.exe -crash -pmn winDgb_Test.exe -FullOnFirst -o D:\VSproject\case-201710\winDgb_Test\Debug\dum 

Aber zu überwachen, wenn das Programm abgestürzt ist, es nicht erzeugen keine „.dmp“ file.What ist das Problem?

+0

Fügen Sie Ihren Code in die Frage _as text_, kein Bild ein. – 1201ProgramAlarm

+1

Sie haben die Dump-Datei erstellt, bevor das Programm etwas getan hat. Sie betrachten den "ersten Startpunkt des Programms". –

+0

@RaymondChen Ja, es war meine Schuld.Ich sollte gelernt haben, wie man den "Windbg" verwendet ... – JimmyJack06

Antwort

0

Wenn Sie mit dem Debuggen einer ausführbaren Datei beginnen und diese ausführbare Datei unter dem Debugger starten (in WinDbg: Datei/ausführbare Datei öffnen), wird das Programm so kurz wie möglich ausgeführt und dann bei initial breakpoint (MSDN) gestoppt.

Zu diesem Zeitpunkt können Sie Ihren Debugger z. Definieren Sie das Ausnahmeverhalten, fügen Sie Haltepunkte hinzu, laden Sie Erweiterungen usw. Wenn Sie damit fertig sind, drücken Sie g, um das Programm laufen zu lassen. Dann reproduzieren Sie den Absturz und erstellen Sie dann den Absturzspeicherauszug.

+0

Ich habe den "adplus" verwendet, um die ausführbare Datei zu überwachen. Aber wenn das Programm abstürzte, erzeugte es keine ".dmp" -Datei.Was ist das Problem? – JimmyJack06

+0

@ JimmyJack06: In der Frage sagst du 'Dann benutze ich" Windbg "um eine" .dmp "Datei zu erstellen'. Jetzt erstellen Sie es mit AdPlus. Bitte bleiben Sie bei Ihren Werkzeugen, solange Sie eine Frage haben. Wenn Sie Probleme mit AdPlus haben, stellen Sie eine neue Frage. –

Verwandte Themen