如何使用Visual Studio调试SQLite源代码

4
我想调试一个由修改过的SQLite代码创建的SQLite数据库实例。当用户从数据库中选择一些数据时,我想逐步查看SQLite源代码,并了解SQLite的逻辑。目的是我想看看是否可以向SQLite源代码添加SELECT触发器,并在其中创建一个具有我的新类型触发器的SQLite数据库。当前,SQLite仅支持UPDATE、INSERT和DELETE上的触发器。
到目前为止,我已经从http://www.sqlite.org/index.html下载了“聚合”的SQLite源代码,并成功在Visual Studio 2010中构建了它。但是,我不知道如何对其进行调试。我尝试创建一个测试C# web应用程序,该应用程序将SQLite项目用作项目引用-但是它不允许我将其添加为引用(抛出一个非常有用的错误,说“无法添加对'mySQLiteproj'的引用”)。我的当前结构只是一个带有sqlite3.c和sqlite3.h文件的空C项目。

SQLite的代码是用C语言编写的,而我对C语言不熟悉,所以可能我正在完全错误的方向上前进?我有C#背景,所以请不要建议我放弃使用Visual Studio,而是使用记事本或其他一些“高级”的IDE :)

简而言之:我如何调试SQLite源代码?

编辑:根据Sergey的建议,我将shell.c文件添加到项目中,现在可以“有点儿”调试了。它会在shell.c中触发断点,但不会在sqlite3.c中触发断点。我可以将sqlite3.c作为从shell.c调用的函数调用,但是行似乎与正在运行的代码不匹配。 一半的行被阻止了(由resharper或许?),没有自动监视变量或突出显示当前中断的代码的行。


我在这里创建了基于cmake的SQLite汇编构建 https://github.com/snikulov/sqlite.cmake.build,因此您可以生成Visual Studio解决方案,将其构建为Debug目标,然后进行调试。希望它能有所帮助。 - Sergei Nikulov
1个回答

0

当你需要调试用一种你不熟悉的编程语言写的库代码时,最好从头开始。

以下是算法:

  1. 学习语言(C)
  2. 学习工具(Visual Studio 中的调试器)
  3. 学习目标(SQLite——提供 API 给其他应用程序使用的库。因此,您需要在 SQLite API(例如 sqlite3_open())上设置断点,并在 Visual Studio 中“运行”shell.c源文件)

我已经创建了基于 CMake 的 SQLite 汇总构建,因此您可以生成 Visual Studio 解决方案,将其构建为 Debug 目标,然后进行调试。希望这对您有所帮助。


  1. 我对C语言不太熟悉,但是我大约15年前曾经编写过它的代码。
  2. 我非常熟悉Visual Studio调试器,因为在过去的8年里,我每天都在使用它。
  3. 我正在开始学习SQLite,这就是我发布这个问题的原因。我正在寻求特定的帮助来设置一个项目 - 而不是一般性的帮助。也许我的问题没有表达清楚,无法得到有用的回答?
- JumpingJezza
@JumpingJezza 抱歉,如果我伤害了你。但是我的介绍提供了一个清晰的开始调试的方式。然后你只需要省略前两个步骤。啊,对了 - 感谢你的负评。 - Sergei Nikulov
你的回答如何帮助我解决如何运行sqlite数据库实例并对其进行调试?引用下投票的话,“这个回答没有用”。 - JumpingJezza
1
为什么不呢?在合并中,我们不仅有sqlite3.c和sqlite3.h,还有使用SQLite API的shell.c。只需将其添加到您的解决方案中,在调试模式下重新构建并运行(别忘了在要调试的API上添加断点)。这就是您在第3个问题下提出的“如何调试SQLite源代码?”的确切答案。 - Sergei Nikulov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接