4

我想调试一个从修改后的 SQLite 代码创建的 SQLite 数据库实例。当用户从数据库中选择一些数据时,我想单步执行 SQLite 源代码,看看 SQLite 的逻辑是什么。这样做的目的是我想看看我是否可以在 SQLite 源代码中添加一个 SELECT 触发器,并在其中创建一个带有我的新型触发器的 SQLite 数据库。目前 SQLite 仅支持 UPDATE、INSERT 和 DELETE 触发器。

到目前为止,我已经从http://www.sqlite.org/index.html下载了“合并”SQLite 源代码并设法在 Visual Studio 2010 中构建它。但是我不知道如何对其进行调试。我尝试创建一个使用 SQLite 项目作为项目参考的测试 C# Web 应用程序 - 但它不允许我将其添加为参考(引发错误说“无法添加对 'mySQLiteproj' 的引用”,这太棒了有用)。我当前的结构只是一个空的 C 项目,其中包含 sqlite3.c 和 sqlite3.h 文件。

SQLite 代码是用 C 编写的,我不熟悉,所以也许我完全走错了路?我来自 C# 背景,所以请不要建议我使用 Visual Studio 报废,而是使用记事本或其他一些“硬核”IDE :)

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

编辑:我已按照 Sergey 的建议将 shell.c 文件添加到项目中,现在可以“进行”调试。它会在 shell.c 中打断点,但不会在 sqlite3.c 中打断。我可以作为 shell.c 的函数调用进入 sqlite3.c,但这些行似乎与正在运行的代码不匹配。一半的行是灰色的(也许是 resharper?)并且没有变量的自动监视或代码当前正在中断的行的突出显示。

4

1 回答 1

0

要调试以您“不熟悉”的语言编写的库代码,最好从头开始。

这里的算法:

  1. 学习语言 (C)
  2. 了解您的工具(Visual Studio 中的调试器)
  3. 了解目标(SQLite - 是为其他人提供 API 的库,因此您需要在 SQLite API 上设置断点,例如 sqlite3_open() 和 Visual Studio 中的“运行”shell.c 源文件)

为 SQLite 合并创建了基于 cmake 的构建,因此您可以生成 Visual Studio 解决方案,将其构建为调试目标,然后进行调试。希望它会有用。

于 2012-09-14T07:41:08.590 回答