微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 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”,如下图所示:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,