【问题标题】:Visual Studio 2008 Wrong Source LineVisual Studio 2008 错误的源代码行
【发布时间】: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


【解决方案1】:

vs2008、vs2010等调试器不能单步超过65536行

Solution1 :通过将这部分移动到大文件中,将您想要介入的任何功能放在第 65536 行中。一次移动一章,我这样做是为了调试 gettable 并工作(*pnColumn 的小错误)

解决方案2:不要再用vs2kXX了,回到vi、emacs等吧。(哈..ha..)

Solution3:按照“在 sqliteInt.h 的中间包含 pcache.h”等指示,将这个巨大的文件切成最小的文件。但是你必须管理大约 150,000 个线条!.. 令人惊讶的是缺少“tcl.h”,等等等等。一件不错的作品,但社区会为你竖起雕像!..

相信我,最好的解决方案是#1。

感谢给我们 SQLite 合并的人或团队!

【讨论】:

  • 请注意,这是*应该*在 VC11 中修复的。
  • 我不确定 vi/emacs 如何帮助调试大型源文件(您的意思是说 Windbg/Ollydbg/etc 而不是命名文本编辑器?),但仍然感谢您识别错误;你比简单地屈尊离开的@DanielFischer 更有帮助。
猜你喜欢
  • 1970-01-01
  • 2010-11-08
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多