2012-03-25 20 views
1

Ich kompiliere sqlite3 mit Visual Studio 2008. Wenn ich versuche, in jede sqlite3-Funktion (z. B. sqlite3_open) Single-Step, Visual Studio zeigt die falsche Zeile des Quellcodes. Und es sieht wirklich falsch aus. Die sqlite3_open-Funktion scheint in Zeile 114,788 deklariert zu werden; und wenn ich einschreite, bringt es mich zu Zeile 49,254.Visual Studio 2008 falsche Quellzeile

Ich habe versucht, alles neu aufzubauen. Ich denke, ich kompiliere alles auf die gleiche Weise (d. H. Dieselbe Laufzeitbibliothek, Debug-Informationsformat usw.).

Was mache ich falsch?

Bearbeiten: Um sqlite3 für Windows zu kompilieren, habe ich ein neues "Win32-Projekt" mit dem Namen "sqlite3" erstellt, das eine statische Bibliothek und ein leeres Projekt auswählt. Ich habe "sqlite3.c" in den "Source Files" -Ordner unter dem neuen "sqlite3" -Projekt und die "sqlite3.h" -Datei in den "Header files" -Ordner hinzugefügt. Das Kompilieren bei diesem Schritt führte zu sqlite3.lib.

Hier ist die Befehlszeile in cl geben:

/Od /D "WIN32" /D "_DEBUG" /D "_LIB" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

ich ein separates EXE-Projekt in der gleichen Lösung, die ich als „Win32-Projekt“ erstellt die Auswahl für sie ein „leeres Projekt zu sein "und eine" Konsolenanwendung ". Dieses Projekt enthält den Header sqlite3.h und als "Zusätzliche Abhängigkeiten" schließe ich sqlite3.lib ein. Mein Code sieht wie folgt aus:

sqlite3 *pDb; 
sqlite3_open("C:\\some.db", &pDb); 

Schritt in diese Funktion mich an die falsche Quellenleitung in sqlite3.c bringt.

Edit2: Hier ist der Link auf die sqlite3 Quelle, die ich heruntergeladen http://www.sqlite.org/sqlite-amalgamation-3071100.zip

Und hier ist die Dokumentation, wie es auf diese Weise bauen (das heißt, nur die sqlite3.c in Ihrem Projekt kompiliert): http://www.sqlite.org/amalgamation.html

Edit3: Für was es wert ist, scheint der Call-Stack in meinem Debugging-Fenster den richtigen Code zu folgen. Und die korrekte Verwendung der API führt zu korrekten Ergebnissen. Es scheint, die Kompilierung funktioniert, die Quellcodezeile ist einfach falsch.

+0

Wie können wir mit diesem kleinen auch vermuten? –

+0

@DanielFischer Sorry, was sollte ich noch hinzufügen, um die Bestimmung zu erleichtern? – omghai2u

+0

Für den Anfang könnten die genauen Schritte, die Sie zum Kompilieren verwendet haben, hilfreich sein. –

Antwort

5

Die Debugger vs2008, vs2010 usw. können nicht mehr als 65536 Zeilen durchlaufen.

Lösung1: Setzen Sie jede Funktion, die Sie in den ersten 65536 Linien Schritt, indem Sie diesen Teil in der großen Datei verschieben möchten. Bewegen Sie ein Kapitel eine Zeit, ich habe es gettable zu debuggen und arbeitete (kleinere Fehler mit * pnColumn)

Solution2: nicht verwenden vs2kXX mehr, kehren Sie zu vi, emacs, etc .. (Ha..ha ..)

Solution3: diese große Datei in kleinsten geschnitten, gemäß den Angaben „Include pcache.h in der Mitte des sqliteInt.h“ etc. etc. Aber dann werden Sie haben etwa 150.000 Zeilen verwalten ! .. mit Überraschungen wie einem fehlenden "tcl.h" zum Beispiel, etc. etc. Ein schönes Stück Arbeit, aber die Community wird eine Statue von dir aufstellen! ..

Glaub mir, die beste Lösung ist die # 1.

Danke an den Kerl oder das Team, die uns SQLite Verschmelzung gegeben haben!

+2

Beachten Sie, dass dies in VC11 \ * angenommen \ * behoben sein sollte. –

+0

Ich bin nicht sicher, wie vi/emacs hilft, eine große Quelldatei zu debuggen (meinst du Windbg/Ollydbg/etc anstatt einen Texteditor zu benennen?), Aber danke, dass du den Fehler trotzdem gefunden hast; Sie sind viel hilfreicher als @DanielFischer, der einfach herablassend und geht. – omghai2u