2010-11-30 5 views
1

Ich habe ein großes Problem mit der Verwendung von STL, C++ und Visual Studio. Wenn ich einige std- oder stl-Funktionen verwende (in der Debug-Kompilierung), habe ich einige Fehler, wie diese "Incorrect format specifier".Debugging-Fehler in STL

aber mein Code ist zu groß für "Handsuche" für diesen Fehler. Vielleicht kann man Hilfe beim Finden von Fehlern bekommen, manche mögen __FILE__ & __LINE__ für Assert? Weil der Programmcode zu groß ist.

Oder try & catch meine letzte Hoffnung? ...

gegen Alex

+1

Die Fehlermeldung sollte die Quelldatei angeben und die Zeilennummer mit ... –

+0

@Oli verknüpft ist: Ich denke, das von der CRT kommt und nicht die Datei/Zeile info hat. –

+0

Ich verstehe es nicht. Gibt der Compiler nicht die Datei & Zeile aller Kompilierungsfehler? – Puppy

Antwort

0

Da Sie den Quellcode für die STL haben, was würde ich tun gesetzt ist, einen Haltepunkt an dem Punkt, wo die " Falscher Formatbezeichner "Zeichenfolge befindet sich. Mache einen grep (zB finde in Dateien) für diesen String, setze einen Haltepunkt bei jedem, führe dein Programm aus und hoffe auf den Tod. :)

+0

Ja, aber ich sage, was das ich habe dieses Problem nur in anderen PC (wenn MSVC nicht an mein Programm angeschlossen). – Alex

+0

@Alex: Ah, dann bist du Problem ist schwieriger. Sie müssen wahrscheinlich auf eine Kombination aus Sprintf-Debugging, Shotgun-Debugging und Minidumps zurückgreifen oder möglicherweise WinDbg mit dem Client-Rechner verbinden. –

0

Vielleicht könnten Sie Statusmeld auf der Konsole tun, damit Sie eine Vorstellung bekommen, wo der Fehler passiert. Sie können in diesem Teil detaillierter mit der gleichen Technik suchen. Mach das so oft du brauchst.
Danach können Sie Programm debuggen und Haltepunkte im 'Problembereich' setzen und schrittweise durchgehen.

EDIT: Wenn Sie das Programm unter Linux kompilieren können, können Sie einfach installieren und ausführen valgrind memcheck. Es sollte alle Fehler mit der Zeilennummer ausdrucken.

+0

Nur in Windows-Plattform :(. Ich weiß über Valgring aber ...Ich weiß nichts das gleiche für Windows nur alte und beendete Projekte oder kommerzielle – Alex

+0

Weil Ihr Code plattformabhängig ist oder Sie Linux nicht haben? Im letzten Fall können Sie eine Live-CD (z. B. Ubuntu) ausprobieren und die benötigten Programme zur Laufzeit installieren. – tbolender

0

Sie sprechen über versuchen/fangen, also nehme ich an, dass es eine Ausnahme wirft. Wenn Sie Ihre App innerhalb des Debuggers ausführen, unterbricht sie Ihr Programm nicht an dem Punkt, an dem die nicht abgefangene Ausnahme ausgelöst wird?

EDIT: Wenn Sie abwechselnd auf Linux kompilieren können/g ++ es hinter einem Kern mit einem Backtrace in diesem Fall verlassen würde.

+0

Sicher sehe ich Stapel und meine Fehler und etc, wenn ich mit MSVC (Debugging) laufen. Aber wenn ich Programm in anderen PC laufe (ohne Debugging-Modus aber mit Debug-Compilierung) sehe ich nichts, nur Fehler Zeile in internen Dateien. – Alex

0

Der beigefügte Screenshot macht deutlich, dass eine Laufzeit Behauptung treffen, und bietet sogar die Möglichkeit, direkt auf die dbugger zu gehen. Dies führt Sie zum fehlerhaften Anrufstapel.

Diese Meldung ist der Standardmodus von _CrtDbgReport. Mit _CrtSetReportHook2 können Sie Ihren eigenen Code ausführen, bevor der Fehler gedruckt wird. Sie könnten zum Beispiel einen Minidump erstellen.