【发布时间】:2012-04-09 12:58:21
【问题描述】:
我正在使用 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
Edit3: 值得一提的是,我的调试窗口中的调用堆栈似乎遵循正确的代码。并且正确使用 API 会导致正确的结果。看来编译成功了,源代码行是错误的。
【问题讨论】:
-
我们怎么能猜到这么少?
-
@DanielFischer 抱歉,我还应该包括什么来帮助确定?
-
对于初学者,您用于编译它的确切步骤可能会有所帮助。
-
@DanielFischer 我认为这都是默认设置。我添加了我用来构建它的确切步骤。请告诉我是否可以添加任何其他内容来帮助确定我的问题。谢谢!
-
@DanielFischer 还有什么我可以澄清或添加的内容来帮助找到解决我的问题的方法吗?
标签: c visual-studio debugging sqlite