2010-04-14 7 views
11

Ich versuche, ein Problem in einer DLL zu debuggen, die in C geschrieben wurde, die weiterhin Zugriffsverletzungen verursacht. Ich benutze Visual C++ 2008, aber der Code ist gerade C.Wie mache ich den Debugger von VC++ bei Ausnahmen brechen?

Ich bin an Delphi gewöhnt, wo, wenn eine Ausnahme beim Ausführen unter dem Debugger auftritt, wird das Programm sofort auf den Debugger brechen und es wird Ihnen geben eine Chance, den Programmstatus zu überprüfen. In Visual C++ bekomme ich jedoch nur eine Nachricht auf der Registerkarte Ausgabe:

First-chance exception at blah blah blah: Access violation reading location 0x04410000. Keine Pausen, nichts. Es geht einfach und wickelt den Stapel ab, bis er wieder in meiner Delphi-EXE ist, die erkennt, dass etwas nicht stimmt, und warnt mich dort, aber zu diesem Zeitpunkt habe ich mehrere Ebenen des Call-Stacks verloren und ich weiß nicht, was vor sich geht.

Ich habe andere Debugging-Techniken ausprobiert, aber was immer es ist, findet tief in einer verschachtelten Schleife in einem C-Makro statt, das mehr als 500 Mal aufgerufen wird, und das ist nur ein bisschen über meine Fähigkeiten (oder meine Geduld) hinaus durchschauen.

Ich denke, es muss einen Weg geben, um die "erste Chance" Ausnahme zu bekommen, um mir tatsächlich eine "Chance" zu geben, damit umzugehen. Es gibt wahrscheinlich einige Konfigurationseinstellungen, die "sofort bei der ersten Chance abbrechen", von denen ich nichts weiß, aber es scheint nicht so auffindbar zu sein.

Weiß jemand, wo es ist und wie man es aktiviert?

Antwort

16

Vom Debug Menü wählen Ausnahmen und die Kontrollkästchen der Ausnahmen Sie den Debugger auf brechen möchten. "Zugriffsverletzung" befindet sich unter "Win32-Ausnahmen".

+0

Danke. Das hat funktioniert. Ich frage mich, warum Zugriffsverletzung nicht standardmäßig aktiviert ist ... –

+0

@Mason: Kein Problem. Ich glaube nicht, dass einige von ihnen standardmäßig überprüft werden. Meine Vermutung ist, dass es eine ziemlich erhebliche Leistungseinbuße gibt, wenn "Pause bei Ausnahme" aktiviert ist (obwohl ich nicht wirklich weiß). –

+0

würde ich nicht denken. Ich kenne C++ nicht so gut, aber in Delphi ist die Leistungseinbuße Null, bis es tatsächlich auf einem bricht, und wenn (wenn) es das bedeutet, bedeutet das normalerweise, dass etwas falsch gelaufen ist und der Debugger genau dort ist, wo Sie wollen Sein. –

1

Sie können einen Datenhaltepunkt auch mit der Adresse erstellen, die in der Zeile "Erste Chance bei ..." angegeben ist.

Nach der Antwort von James befinden sich die Ausnahmen, die Sie suchen, unterhalb des Abschnitts Win32-Ausnahmen. Sie sollten Zugriffsverletzung dort sehen.

+0

Würde das funktionieren? Dies ist ein "Lesen von" -Fehler, und AFAIK-Datenhaltepunkte gehen nur dann aus, wenn Sie den Wert an der fraglichen Adresse ändern. –

+0

Sie können brechen, wenn die Ausführung einen bestimmten Ort erreicht (ich denke, es ist nur eine Option im Dialogfeld "Haltepunkteigenschaften"). –

Verwandte Themen