Wie kann ich debug St9bad_alloc Fehler in der gdb C?
Ich habe ein Programm Fehler mit:
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Ich vorstellen, es ist etwas zu tun mit malloc
/free
, aber ich weiß nicht welches.
Was breakpoint kann ich in gdb festgelegt, dass eine Unterbrechung auf die Fehler, so dass ich anzeigen kann, einen stack-trace?
Das Programm ist eine Kombination von C und C++, kompiliert mit gcc 3.4.2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht wirklich malloc/free, die die Ausnahme verursacht, es ist "neue", die auf jeden Fall in C++ - Teil der Anwendung. Wie es aussieht, sind die parameter, die zu groß für die "neuen" zu reservieren.
'std::bad_alloc' verursacht wird, indem Sie den folgenden code Beispiel:
Was bedeutet backtrace sagt, wenn Sie Last crash-dump in gdb?
Wenn Sie nicht generieren, dump, können Sie Fragen GDB zu stoppen wenn die Ausnahme geworfen bzw. abgefangen werden.
Leider sind einige Versionen von GDB, die Unterstützung nur die folgende syntax:
welche Ihnen erlaubt, zu durchbrechen Anwendung, wenn eine Ausnahme ausgelöst wird.
Jedoch Ihnen helfen, zu sehen, dass es möglich sein sollte, zu laufen
in neueren Versionen.
Und vergessen Sie nicht, dass:
ist eine gute Quelle für andere nützliche Informationen.
Es ist durchaus möglich, dass dies geschieht, da einige Speicher überschrieben wird, so kann die memory allocation Systems Stand (die ist in der Regel gehalten, entweder vor oder nach der Speicher-Blöcken an die Anwendung zurückgegeben).
Wenn Sie die Möglichkeit haben (d.h., Sie sind auf x86 Linux), führen Sie Ihr Programm in Valgrind, kann es oft zeigen Ihnen genau, wo die Korruption passiert.
Habe ich dies beim Versuch zu Lesen in eine Datei, die nicht vorhanden sind... ich würde versuchen, erstellen Sie einen internen Puffer für die Datei-Inhalte, aber da die Datei nicht vorhanden ist, meine Schöpfung der Puffer nach oben geschraubt.
Denken Sie daran, Kinder, immer initialisieren Sie Ihre Variablen 😀 und check für null-Fälle.