设为首页 收藏本站
查看: 1122|回复: 0

[经验分享] Sqlite的编译、使用和调试

[复制链接]

尚未签到

发表于 2016-11-30 06:26:26 | 显示全部楼层 |阅读模式
  首先准备好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 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”,如下图所示:
DSC0000.gif

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

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

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307286-1-1.html 上篇帖子: QT3连接SQLite及使用方法 下篇帖子: 如何使用C#操作SQLite数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表