SQLite---调试提示(十九)

返回:SQLite—系列文章目录   

上一篇:SQLite Android 绑定(十八)

下一篇:从 SQLite 3.4.2 迁移到 3.5.0(二十)

以下是 SQLite 开发人员跟踪、检查和了解 核心 SQLite 库。

这些技术旨在帮助理解 核心SQLite库本身,而不是仅使用SQLite的应用程序。

SQLITE_ENABLE_TREETRACE和SQLITE_ENABLE_WHERETRACE选项 未记录在编译时选项文档中,因为它们 不受官方支持。他们所做的是激活 命令行中的“.treetrace”和“.wheretrace”点命令 shell,它为逻辑提供低级跟踪输出 分别为 SELECT 和 DML 语句以及 WHERE 子句生成代码。

  1. 在命令行 shell 中使用“.eqp full”选项

    当您有正在调试或尝试的 SQL 脚本时 为了理解,在命令行 shell 中使用“.eqp full”设置运行它通常很有用。当 “.eqp” 设置为 FULL 时,shell 自动显示 EXPLAIN 和 EXPLAIN QUERY PLAN 输出 在实际运行该命令之前的每个命令。

    为了增加可读性,还设置了“.echo on”,以便输出包含 原始 SQL 文本。

    较新的“.eqp trace”命令执行“.eqp full”执行的所有操作 并打开 VDBE 跟踪。

  2. 使用编译时选项启用调试功能。

    建议的编译时选项包括:

    • -DSQLITE_DEBUG
    • -DSQLITE_ENABLE_EXPLAIN_COMMENTS
    • -DSQLITE_ENABLE_TREETRACE
    • -DSQLITE_ENABLE_WHERETRACE
  3. 从调试器调用 sqlite3ShowExpr() 和类似内容。

    当使用 SQLITE_DEBUG 编译时,SQLite 包含的例程将 将各种内部抽象语法树结构打印为 ASCII 艺术图。 这在调试中非常有用,以便了解变量 SQLite正在使用。可以使用以下例程:

    • 无效 sqlite3ShowExpr(const Expr*);
    • 无效 sqlite3ShowExprList(const ExprList*);
    • 无效 sqlite3ShowIdList(const IdList*);
    • 无效 sqlite3ShowSrcList(const SrcList*);
    • void sqlite3ShowSelect(const Select*);
    • void sqlite3ShowWith(const With*);
    • void sqlite3ShowUpsert(const Upsert*);
    • void sqlite3ShowTrigger(const Trigger*);
    • void sqlite3ShowTriggerList(const Trigger*);
    • void sqlite3ShowTriggerStep(const TriggerStep*);
    • void sqlite3ShowTriggerStepList(const TriggerStep*);
    • void sqlite3ShowWindow(const Window*);
    • void sqlite3ShowWinFunc(const Window*);

    这些例程不是 API,可能会更改。他们是 仅用于交互式调试。

  4. test_addoptrace上的断点

    在调试字节码生成器时,了解通常很有用 正在生成特定操作码的位置。为了轻松找到它, 在调试器中运行脚本。在“test_addoptrace”上设置断点 常规。然后运行“PRAGMA vdbe_addoptrace=ON;”,然后运行 有问题的 SQL 语句。每个操作码将按原样显示 附加到 VDBE 程序,断点将立即触发 此后。步进直到到达操作码,然后向后看 以查看其生成位置和方式。

    这仅在使用 SQLITE_DEBUG 编译时才有效。

  5. 使用 “.treetrace” 和 “.wheretrace” shell 命令

    当命令行 shell 和核心 SQLite 库 两者都用 SQLITE_DEBUG 和 SQLITE_ENABLE_TREETRACE 和 SQLITE_ENABLE_WHERETRACE,然后 shell 有两个命令用于打开 代码生成器最复杂的部分 - 处理 分别是 SELECT 语句和 WHERE 子句。 “.treetrace”和“.wheretrace”命令各采用一个数字 可以用十六进制表示的论点。每个位都打开 调试的各个部分。“0xfff”和“0xff”的值通常为 使用。使用参数“0”关闭所有跟踪输出。

  6. 使用“.breakpoint”shell 命令

    CLI 中的“.breakpoint”命令只调用 名为“test_breakpoint()”的过程,这是一个无操作。

    如果你有一个脚本,并且想要在某个时候开始调试 在该脚本的中途,只需在 gdb(或其他任何内容)中设置一个断点 正在使用的调试器)上test_breakpoint,并添加一个 “.breakpoint”命令。当你第一次到达时 断点,设置任何额外的断点是变量跟踪你 需要。

  7. 禁用后备内存分配器

    查找内存分配问题(内存泄漏、释放后使用 错误、缓冲区溢出等)有时禁用后备内存分配器,然后在 valgrind 或 MSAN 或 其他一些堆内存调试工具。 后备内存分配器可以 在启动时使用 SQLITE_CONFIG_LOOKASIDE 界面禁用。命令行 shell 将使用该接口来执行以下操作 如果以“--lookaside 0 0”开头,则禁用 lookaside 命令行选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619395.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端工程化指南】什么是版本控制系统?

什么是版本控制系统 想必大家在多人开发时一定会遇到这样的问题: 每次集中合并大家的代码都要通过U盘、网盘等各类传输工具集中代码,非常麻烦。在多人同时修改同一文件或相同部分代码时,可能会产生冲突,开发人员需要手动比较代码…

内网渗透-Earthworm的简单使用(内网穿透工具)

Earthworm的简单介绍(一) 文章目录 EarthWorm下载地址1. 普通网络 1.1 跳板机存在公网IP 1.1.1 网络环境1.1.2 使用方法1.1.3 流量走向 1.2 跳板机不存在公网IP,可出网 1.2.1 网络环境1.2.2 使用方法1.2.3 流量走向 2. 二级网络 2.1 一级跳…

「51媒体」中小初创企业如何做好媒体宣传?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 中小初创企业在做媒体宣传时,由于通常资源有限,需要更加精明地使用外部资源来提升品牌知名度和业务成长。利用专业的媒体服务商可以是一个非常有效的方法。 明确目…

C/C++基础----内存相关

malloc分配内存 用法 参数为要开辟内存的大小&#xff08;字节为单位&#xff09;返回值为void*,所以要强转一下语法&#xff1a;malloc()动态开辟20个字节的内存&#xff0c;代码&#xff1a;#include <iostream>using namespace std;int main() {int *a (int *) mal…

集合体系java

Collection:单列集合&#xff1a;每个元素只包含一个值 Collection集合存储的是地址 Collection的三种遍历方法如下 //迭代器是用来遍历集合的专用方式&#xff08;数组没有迭代器&#xff09;&#xff0c;在java中迭代器的代表是Iterator //boolean hasNext():询问当前位置…

排序算法-基数排序

基数排序是一种非比较排序算法&#xff0c;它将待排序的数字按照位数进行排序。基数排序的思想是先按照个位数进行排序&#xff0c;然后按照十位数进行排序&#xff0c;接着按照百位数进行排序&#xff0c;以此类推&#xff0c;直到最高位排序完成。 基数排序的步骤如下&#x…

攻防世界13-simple_php

13-simple_php <?php show_source(*__FILE__*);//高亮文件 include("config.php");//文件包含在内 $a$_GET[a];//获得a $b$_GET[b];//获得b if($a0 and $a){ //判断a是否满足条件echo $flag1; //满足就输出flag1 } if(is_numeric($b)){ //判断b的条件&#x…

分享一些有趣的 Linux 命令

1、sl 会显示一辆火车穿过你的终端屏幕 2、cmatrix 在终端中显示类似于《黑客帝国》电影中的绿色数字雨效果 3、fortune 显示一个随机的名人名言或者笑话 4、cowsay 让一头牛说出你输入的话 5、toilet 在终端中将输入的文本以艺术字体的形式呈现 6、figlet 类似于 toile…

linux进阶篇:使用Apache搭建文件服务器目录

Linux服务搭建篇&#xff1a;使用Apache搭建文件服务器目录 一、关于文件服务器 ​ 在一个项目中&#xff0c;如果想把公共软件或者资料共享给项目组成员&#xff0c;可以搭建一个简易的文件服务器来实现&#xff0c;只要是在局域网内的成员都可以通过浏览器或者wget命令来下…

微软搭建零售新媒体创意工作室大举抢占数字营销广告市场

“微软新零售创意工作室新平台利用生成式人工智能&#xff0c;在几秒钟内轻松定制横幅广告。零售媒体预计到2026年将成为一个价值1000亿美元的行业。” 零售媒体在过去几年中发展迅速。根据eMarketerOpens在新窗口的数据&#xff0c;预计到2024年&#xff0c;仅美国的零售媒体…

负荷预测 | Matlab基于TCN-LSTM-Attention单变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.负荷预测 | Matlab基于TCN-LSTM-Attention单变量时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境ma…

基于springboot实现购物推荐网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现购物推荐网站系统演示 摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了东大每日推购物推荐网站的开发全过程。通过分析企业对于东大每日推购物推荐网站的需求&#xff0c;创建了一个计算机管…