Visual Studio 2008错误的源代码行

时间:2012-03-25 23:44:12

标签: c visual-studio debugging sqlite

我正在使用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​​可以获得正确的结果。看来编译工作,源代码行是错误的。

1 个答案:

答案 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合并的人或团队!