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 命令行选项。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从 SQLite 3.5.9 迁移到 3.6.0(二十一)

返回:SQLite—系列文章目录 上一篇:从 SQLite 3.4.2 迁移到 3.5.0(二十) 下一篇:SQLite—系列文章目录 ​SQLite 版本 3.6.0 (2008-07-16) 包含许多更改。按照惯例 SQLite项目&#xff…

中移物联网 OneOS 操作系统环境搭建和工程创建

一、官网 OneOS Lite是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-A和 Cortex-M、MIPS、RISC-V等主流芯片架构,兼容POSIX、CMSIS等标准接口,支持Javascript、MicroPyt…

Ubuntu下配置Android NDK环境

Android-NDK的下载 下载Android-NDK wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 执行bin文件(即解压) ./android-ndk-r10c-linux-x86_64.bin Android-NDK的配置 要想使用Android-NDK,还需要进行环境变量…

C++ stl容器string的底层模拟实现

目录 前言: 1.成员变量 2.构造函数与拷贝构造函数 3.析构函数 4.赋值重载 5.[]重载 6.比较关系重载 7.reserve 8.resize 9.push_back,append和重载 10.insert 11.erase 12.find 14.迭代器 15.流插入,流提取重载 16.swap 17.c_str 18.完…

Testng测试框架(6)--@Factory动态地创建测试类的实例

工厂允许您动态地创建测试。例如,假设您想创建一个测试方法,该方法将多次访问网站上的某个页面,并且您希望使用不同的值来调用它。 public class TestWebServer {Test(parameters { "number-of-times" })public void accessPage(…

【C++题解】1605. 求一个两位数的个位和十位的和

问题:1605. 求一个两位数的个位和十位的和 类型:基本运算、拆位求解。 题目描述: 从键盘读入一个两位的整数 n ,请求出这个两位整数个位和十位的和是多少? 输入: 一个两位的整数 n 。 输出&#xff1a…

hbase基础shell用法

HBase中用create命令创建表,具体如下: create student,Sname,Ssex,Sage,Sdept,course 此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键&#x…

【MySQL】事务篇

SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 目录 本系列专栏 1. 什么是事务 2. 事务的特征 原子性(Atomicity) 一致性(Consistency) 隔离性&…

255Mesh 无线lora模块详细配置和测试

一、型号介绍 字符含义: E:终端 N:节点(node) G:网关 (gateway) 官网淘宝介绍 注意:组网必须配网关。 二、功能配置 软件界面 1.网络参数 网络参数包括网络 ID&a…

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面,记录结题过程 有序矩阵中第 K 小的元素 - 力扣(LeetCode) https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix ,其…

FPGA基于VCU的H265视频压缩,HDMI2.0输入,支持4K60帧,提供工程源码+开发板+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板视频输入Video PHY ControllerHDMI 1.4/2.0 Receiver SubsystemVideo Processing SubsystemVideo Frame Buffer WriteZynq UltraScale VCUPetaLinux 系统制作VLC播放器工…

ubuntu安装irtualbox注意事项

下载官网7.0版本,ubuntu22.04,安装一直出错误,查到了下面兄弟的办法,仍然不幸,最后使用apt重装,请按第二部分流程安装,安装6.1,可以用 第一部分,反正我是没搞通,7.0反复的出现相同的…

在 Leetcode 上使用 Javascript 查找数组中的所有重复项(使用 JS 的 DSA)

在本篇博客文章中,我们将探讨如何在数组中找出所有重复的元素,这个问题源自LeetCode上的一个问题。 问题描述: 我们有一个包含n个整数的数组,所有整数都在范围[1, n]内。每个整数要么出现一次,要么出现两次。任务是找…

第8章 项目整合管理

子过程:为创建预定的产品、服务或成果而执行的一系列相互关联的行动和活动; 既属于某一过程组(启动、规划、执行、监控、收尾)又属于某一知识领域(整合、范围、进度、成本、质量、资源、采购、沟通、干系人、风险&…

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型。随着5G技术的快速发展,越来越多的行业开始探索数字化转型的道路。水利行业作为国民经济的重要支柱,也面临着数字化转型的迫切需求。5G智慧水利数字孪生可视化平台作为水利行业数字化转…

数据安全之路:Databend 用户与角色管理应用

Databend 目前支持基于角色的访问控制 (RBAC) 和 自主访问控制 (DAC) 模型,用于访问控制功能。 通过本指南,我们会了解权限和角色在 Databend 中的基本概念,以及如何管理角色、继承角色与建立层级、设置默认角色以及所有权的重要性。这些功能…

活动预告|NineData 创始人CEO叶正盛将参加QCon全球软件开发大会,共话AI大模型技术在数据库DevOps的实践

4月13日下午,NineData创始人&CEO叶正盛即将参加InfoQ中国主办的『QCon全球软件开发大会北京站』的技术大会。在本次技术峰会上,叶正盛将以《AI大模型技术在数据库DevOps的实践》为主题,深入剖析AI大模型技术在数据库DevOps领域的最新进展…

逆向案例二十一——遇到混淆怎么办

开始新的板块尝试,混淆了怎么办 网址:极简壁纸_海量电脑桌面壁纸美图_4K超高清_最潮壁纸网站 抓包抓到,好久没做解密了,奥里给干他!: 搜索关键字,打上断点,点击第二页。 _0x10a345…

SOLIDOWRKS怎么将中间格式的模具装配体转化为装配体格式

模具是工业生产中用于制作成型物品的工具,它由各种零件构成,可以通过改变所成型材料的物理状态来实现物品外形的加工。如果工程师已经有其他格式的模具装配体,但是又想将其他格式的模具装配体导入solidworks里面,并且将一个个实体…

rust wasm入门

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…