Sqlite的编译、使用和调试

首先准备好gcc的编译环境,这里我用的是mingw。

然后下载sqlite3的源代码。

然后用如下的命令进行编译:

gcc -DSQLITE_DEBUG -ggdb *.c -o sqlite3

其中的编译参数“SQLITE_DEBUT”是过会用来理解sqlite时使用的,,详细请参考附录。

编译参数-ggdb是用来生成gdb调试信息的,在待会源代码的调试中会用到。

接着运行编译好的sqlite3.exe

在命令行中首先打开调试属性(用于查看sqlite的虚拟机的指令集)

PRAGMA vdbe_trace=ON;最后就是运行sqlite语句并分析。

sqlite> create table cust(id int not null primary key, name char(30));sqlite> PRAGMA vdbe_trace=ON;VDBE Execution Trace:0 Expire0 0 0001 Halt0 0 000sqlite> insert into cust values(21, "harry");VDBE Execution Trace:0 Trace0 0 0001 Goto0 20 000 20 Transaction0 1 000 21 VerifyCookie0 1 000 22 TableLock0 2 1 cust 00 23 Goto0 2 0002 OpenWrite0 2 0 2 00 cust3 OpenWrite1 3 0 keyinfo(1,BINARY) 00 sqlite_autoindex_cust_14 NewRowid0 2 000REG[2] = i:15 Integer21 3 000REG[3] = i:216 String80 4 0 harry 00REG[4] = t5[harry](8)7 HaltIfNull19 2 3 cust.id may not be NULL 00REG[3] = i:218 SCopy3 5 000REG[3] = i:21REG[5] = i:21REG[5] = i:219 SCopy2 6 000REG[2] = i:1REG[6] = i:1REG[6] = i:1 10 MakeRecord5 2 1 db 00REG[1] = z5[0301011501…..](8) 11 SCopy2 7 000REG[2] = i:1REG[7] = i:1REG[7] = i:1 12 IsUnique1 14 7 5 00REG[7] = i:1 14 IdxInsert1 1 010REG[1] = z5[0301011501…..](8) 15 MakeRecord3 2 7 da 00REG[7] = z9[030117156861727279….harry](8) 16 Insert0 7 2 cust 1BREG[7] = z9[030117156861727279….harry](8)REG[2] = i:1 17 Close0 0 000 18 Close1 0 000 19 Halt0 0 000sqlite>

上面的调试信息在以后的文章中介绍sqlite的虚拟机的时候会仔细讲解。

==================================

接下来,将用介绍用eclipse结合gdb来调试sqlite的源代码。

eclipse的环境要求:安装插件cdt。

在环境变量中要有gcc和gdb这两个命令。

新建一个c工程,然后把sqlite的几个代码导入到工程中。

调试开始:

1. 打开sqlite.exe

2. 右击eclipse的c工程,然后在弹出的菜单上选择"Debug As"/"Run Configurations…",在弹出的对话框的左边双击“C/C++ Attach to Application”,并且在右边选择“Disable auto build”,如下图所示:

3. 点击Debug按钮,弹出如下对话框,选择刚刚启动的sqlite.exe,就进入调试了。

4. 加入断点设置在shell.c的process_input函数中(此函数用来接收控制台的输入),然后在控制台输入sql命令,调试的画面如下:

感悟了不同的人生。凌晨,随着滑轮接触地面,

Sqlite的编译、使用和调试

相关文章:

你感兴趣的文章:

标签云: