Crash - Funktion/Methode ermitteln



  • Moin,

    Situation: Ich habe eine .exe-Datei, die von einem Server aus aufgerufen wird. Die Datei verbindet sich dann per Socket mit dem Server und kommuniziert, beendet sich nach Ablauf der Kommunikation selbst.

    Problem: Bei 100 Testläufen stürzt das Programm ca. 1 mal ab, "Programm hat ein Problem festgestellt und muß beendet werden". Ich kann nicht regulär den Debugger einer IDE benutzen, da ich den Prozess nicht selbst starte und damit steuere. Da die Wahrscheinlichkeit so gering ist, bringt mir der Einzelschrittmodus, bei dem ich den Prozess selber starten könnte, auch nichts.

    Ich bin den code schon mehrfach durchgegangen und habe viele Asserts eingefügt. Ich benutze fast keine regulären Pointer, eigentlich dereferenziere ich nur std::map, std::vector iteratoren bzw. std::pair (first, second). Die Objekte, auf denen das geschieht, werden alle in Konstruktoren initalisiert, die Asserts sichern eigentlich zusätzlich dagegen ab, dass Zugriffe außerhalb des Ranges auftreten.

    Gibt es eine Möglichkeit, aus dem Offset, den Windows beim Absturz ermittelt, die Funktion, in der der Fehler auftritt, zu finden? Dann könnte ich die Fehlersuche schon einmal einschränken.
    Jemand im IRC empfahl nur "nm" unter Windows, jedoch fand dieser bei der Suche nach dynamischen Symbolen in der .exe bei dem entsprechenden Offset keine funktion (warum auch immer).

    Wenn das zu schwer ist - gibt es noch andere Möglichkeiten, z.B. eine Proxy-Exe, der als Stellvertreter gestartet wird und die eigentliche Exe in einem Debugging-Environment startet?

    MfG



  • Wenn Du mit VisualStudio entwickelst kannst Du Dich einfach bei dem Crash mit Deinem VS an den Prozess attachen und den Crash direkt analysieren.

    Wichtiger wird vermutlich der Callstack sein, als die Crashadresse.
    Du kannst Dir auch einen Minidump (->Google) mit vielen Informationen erzeugen lassen, den Du in das VS lädst und den Crash postmortem analysieren.


Anmelden zum Antworten