我正在使用Visual Studio 2008编译sqlite3。当我尝试单步执行任何sqlite3函数(例如sqlite3_open
)时,Visual Studio会显示错误的源代码行。它看起来真的错了。 sqlite3_open
函数似乎在114,788行上声明;当我单步进入时,它将我带到第49,254行。
我尝试过重建一切。我想我正在以相同的方式编译所有内容(即相同的运行时库,调试信息格式等)。
我做错了什么?
编辑:为了编译Windows的sqlite3,我创建了一个新的“Win32项目”,命名为“sqlite3”,选择它作为静态库,以及一个空项目。我将“sqlite3.c”添加到新“sqlite3”项目下的“Source Files”文件夹中,将“sqlite3.h”文件添加到“Header files”文件夹中。在此步骤中进行编译产生了sqlite3.lib。
这是传递给cl的命令行:
/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
我在与“Win32项目”创建的同一解决方案中有一个单独的.exe项目,选择它作为“空项目”和“控制台应用程序”。这个项目包括sqlite3.h头文件,作为“附加依赖项”,我包括sqlite3.lib。 我的代码如下所示:
sqlite3 *pDb;
sqlite3_open("C:\\some.db", &pDb);
单步执行此函数会将我带到sqlite3.c中错误的源代码行。
Edit2:以下是我下载的sqlite3源代码的链接:http://www.sqlite.org/sqlite-amalgamation-3071100.zip
以下是如何以这种方式构建它的文档(即,只需在项目中编译sqlite3.c):http://www.sqlite.org/amalgamation.html
编辑3:对于它的价值,调试窗口中的调用堆栈似乎遵循正确的代码。正确使用API可以获得正确的结果。看来编译工作,源代码行是错误的。
答案 0 :(得分:6)
vs2008,vs2010等调试器不能超过65536行。
Solution1 :通过在巨大的文件中移动此部分,在第1 65536行中放入您想要介入的任何函数。移动一章一次,我做了调试gettable和工作(与* pnColumn的小错误)
解决方案2 :不再使用vs2kXX,返回vi,emacs等。(哈哈哈......)
解决方案3 :按照“在sqliteInt.h中包含pcache.h”等指示,将这个巨大的文件剪切成最小的文件等等。但是你必须管理大约150,000个作为一个缺少“tcl.h”的惊喜,等等等。这是一件很棒的作品,但是社区会举起你的雕像!..
相信我,最好的解决方案是#1。
感谢那些给我们SQLite合并的人或团队!