Sqlite的编译、使用和调试
2011-09-08 17:01
471 查看
首先准备好gcc的编译环境,这里我用的是mingw。
然后下载sqlite3的源代码。
然后用如下的命令进行编译:
其中的编译参数“SQLITE_DEBUT”是过会用来理解sqlite时使用的,详细请参考附录。
编译参数-ggdb是用来生成gdb调试信息的,在待会源代码的调试中会用到。
接着运行编译好的sqlite3.exe
在命令行中首先打开调试属性(用于查看sqlite的虚拟机的指令集)
最后就是运行sqlite语句并分析。
上面的调试信息在以后的文章中介绍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”,如下图所示:
![](http://hi.csdn.net/attachment/201109/8/0_13154719545i6S.gif)
3. 点击Debug按钮,弹出如下对话框,选择刚刚启动的sqlite.exe,就进入调试了。
![](http://hi.csdn.net/attachment/201109/8/0_1315472103T197.gif)
4. 加入断点设置在shell.c的process_input函数中(此函数用来接收控制台的输入),然后在控制台输入sql命令,调试的画面如下:
然后下载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 Expire 0 0 0 00 1 Halt 0 0 0 00 sqlite> insert into cust values(21, "harry"); VDBE Execution Trace: 0 Trace 0 0 0 00 1 Goto 0 20 0 00 20 Transaction 0 1 0 00 21 VerifyCookie 0 1 0 00 22 TableLock 0 2 1 cust 00 23 Goto 0 2 0 00 2 OpenWrite 0 2 0 2 00 cust 3 OpenWrite 1 3 0 keyinfo(1,BINARY) 00 sqlite_autoindex_cust_1 4 NewRowid 0 2 0 00 REG[2] = i:1 5 Integer 21 3 0 00 REG[3] = i:21 6 String8 0 4 0 harry 00 REG[4] = t5[harry](8) 7 HaltIfNull 19 2 3 cust.id may not be NULL 00 REG[3] = i:21 8 SCopy 3 5 0 00 REG[3] = i:21 REG[5] = i:21 REG[5] = i:21 9 SCopy 2 6 0 00 REG[2] = i:1 REG[6] = i:1 REG[6] = i:1 10 MakeRecord 5 2 1 db 00 REG[1] = z5[0301011501.....](8) 11 SCopy 2 7 0 00 REG[2] = i:1 REG[7] = i:1 REG[7] = i:1 12 IsUnique 1 14 7 5 00 REG[7] = i:1 14 IdxInsert 1 1 0 10 REG[1] = z5[0301011501.....](8) 15 MakeRecord 3 2 7 da 00 REG[7] = z9[030117156861727279....harry](8) 16 Insert 0 7 2 cust 1B REG[7] = z9[030117156861727279....harry](8) REG[2] = i:1 17 Close 0 0 0 00 18 Close 1 0 0 00 19 Halt 0 0 0 00 sqlite>
上面的调试信息在以后的文章中介绍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”,如下图所示:
![](http://hi.csdn.net/attachment/201109/8/0_13154719545i6S.gif)
3. 点击Debug按钮,弹出如下对话框,选择刚刚启动的sqlite.exe,就进入调试了。
![](http://hi.csdn.net/attachment/201109/8/0_1315472103T197.gif)
4. 加入断点设置在shell.c的process_input函数中(此函数用来接收控制台的输入),然后在控制台输入sql命令,调试的画面如下:
![](http://hi.csdn.net/attachment/201109/8/0_1315472514i8xs.gif)
相关文章推荐
- 【菜鸟玩Linux开发】在Linux中使用VS Code编译调试C++项目
- 使用跟踪和调试进行条件编译
- 使用VS2008编译EDK2源码并调试
- 在windows下使用vs2013编译和调试mysql源代码
- 学习笔记之使用vi之调试/编译
- Andriod调试真机时 使用sqlite3访问数据库
- (c#)AutoCAD二次开发,netload后,重新调试编译出现“XXXXXX正由另一进程使用,因此无法访问文件”
- Ubuntu 下使用Eclipse编译、调试嵌入式程序的方法(下)
- 使用vs2008编译调试apache源码
- SQLite的编译、安装和使用
- cocos2dx 3.x 在wp开发时,使用sqlite3出现无法使用/ZW编译的问题
- Linux使用eclipse编译,调试Nginx模块
- Windows下使用vim编写代码,使用nmake编译代码,使用vs来调试代码
- 关于Vs 2005 中出现编译通过,但运行时出现“未使用调试信息生成二进制文件”的问题
- 使用.NET Reflector单步调试编译好的程序集
- 使用NDK移植/编译开源库(5)sqlite3的编译
- [无视][mark]在Ubuntu下使用vscode编程、编译、调试、单步调试C++
- sass初次使用及奇淫技巧之使用谷歌调试编译sass
- 使用VS2010编译sqlite3,生成静态的sqlite3.lib
- 交叉编译和交叉调试环境搭建及使用