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

news2024/11/27 2:25:03

返回: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.coloradmin.cn/o/1587489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于arcgis /envi PCA(主成分分析)实现过程

基于arcgis /envi PCA(主成分分析)实现过程 1 提取研究范围 2对研究范围进行重采样 (根据数据情况进行选做,如数据较大建议进行该步骤操作) 3 对研究范围内数据进行归一化处理 4 将空值替换为0 5 对同期不同要素数据进行波段合成 对波段…

探讨解决emp.dll文件丢失问题的步骤和方法,一键解决emp.dll丢失烦恼问题

在电脑使用过程中,有时会遇到提示emp.dll文件丢失的错误弹窗,这种情形通常由于某些误操作或问题导致emp.dll文件出现异常。面对这样的状况,可以采取以下几种方法来解决emp.dll文件缺失的问题。接下来,让我们共同探讨解决emp.dll文…

Java复习第十七天学习笔记(转发、重定向,GET,POST),附有道云笔记链接

【有道云笔记】十七 4.3 转发、重定向、Get、POST、乱码 https://note.youdao.com/s/GD5TRksQ 一、转发 转发:一般查询了数据之后,转发到一个jsp页面进行展示 req.setAttribute("list", list); req.getRequestDispatcher("student_lis…

美团外卖基于GPU的向量检索系统实践

总第587篇 | 2024年第007篇 到家搜索业务具有数据量大、过滤比高等特点,为了在保证高召回率的同时进一步提高检索性能,到家搜索技术团队与美团基础研发机器学习平台团队基于GPU实现了支持向量标量混合检索的通用检索系统,召回率与检索性能均有…

【精品PPT】智慧路灯大数据平台整体建设实施方案(免费下载)

1、知识星球下载: 如需下载完整PPTX可编辑源文件,请前往星球获取:https://t.zsxq.com/19QeHVt8y 2、免费领取步骤: 【1】关注公众号 方案驿站 【2】私信发送 【智慧路灯大数据平台】 【3】获取本方案PDF下载链接,直…

绝地求生:AUG爆裂弹球黑货箱:街机动漫风格大家会喜欢吗?

大好,我闲游盒! 4.10更新后,AUG的新成长型也出来了,更新后我觉得AUG变好用了一点,不知道大家有没有感觉出来? 宝箱概率 本期主角 AUG-爆裂弹球(紫色配粉红色) 本次的AUG我才升到5级…

【力扣】101. 对称二叉树

101. 对称二叉树 题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示…

HWOD:二维数组下标合法性判断

一、知识点 1、停止读取的判定条件有两种写法 (1):while(scanf()!EOF) (2):while(scanf()>0) 在代码提交平台(1)和(2)都可以用 在本地,只能用(2),且要有非法输入的配合。比如要读取的是整数,但输入了字符串&am…

UE5 在骨骼动画模型上绘制贴图

参考:Unreal 5.1 - How to paint damage textures and other effects on skeletal meshes 针对模型,在运行状态下通过射线指定一定范围,添加材质效果。 核心思路 通过射线获取命中点,作为材质参数材质中,命中的世界…

智慧矿山视频智能监控与安全监管方案

一、行业背景 随着全球能源需求的日益增长,矿业行业作为国民经济的重要支柱,其发展日益受到广泛关注。然而,传统矿山管理模式的局限性逐渐显现,如生产安全、人员监管、风险预警等方面的问题日益突出。因此,智慧矿山智…

LabVIEW无线快速存取记录器(WQAR)测试平台

LabVIEW无线快速存取记录器(WQAR)测试平台 随着民用航空业的迅速发展,航空安全的保障日益成为公众和专业领域的关注焦点。无线快速存取记录器(WirelessQuick Access Recorder, WQAR)作为记录飞行数据、监控飞行品质的…

个人博客系统项目(SpringBoot+Linux部署上线)

在学完SpringBoot框架、MyBatis后,直接开始做第一个项目:博客系统 首先,该博客系统包含核心功能有: 一、登录、注册、退出登录功能。 二、没有登陆前可以查看博客首页以及博客展示的分页处理,以及点击查看博客可以…

10个大型语言模型(LLM)常见面试问题和答案解析

今天我们来总结以下大型语言模型面试中常问的问题 1、哪种技术有助于减轻基于提示的学习中的偏见? A.微调 Fine-tuning B.数据增强 Data augmentation C.提示校准 Prompt calibration D.梯度裁剪 Gradient clipping 答案:C 提示校准包括调整提示,尽量减少产生…

g4f姊妹篇:g4l gpt4local面世拉!

众所周知g4f很强,安装具体见:gpt4free带来了更好的chatgpt体验!-CSDN博客 可喜的是,现在它的姊妹篇,gpt4local也面世拉!g4l 是一个高级 Python 库,允许您使用 llama.cpp 绑定运行语言模型。它是…

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan,定时任务解决 挖矿病毒会隐藏chattr的操作权限,让我们无法删除病毒文件,杀掉病毒进程。所以要去下载chattr.c的文件,编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …

http请求头导致了dial tcp:lookup xxxx on 10.43.0.10:53 no sunch host

事实证明人有的时候也不能太偷懒,太偷懒容易给自己埋坑。 问题的背景: web端调用服务A,服务A异步调用服务B。服务A有四个场景需要调用服务B,所以,服务A中封装了一个公用的方法,唯一的区别是,场…

【how2j练习题】HTML DOM部分阶段练习

练习1 <!-- 验证账号是否已经存在 那么就在js使用简单的验证规则&#xff1a; 如果账号是以a或者A开头的&#xff0c;那么就提示已经存在了。 --> <!-- 1.需要一个输入框和一个按钮 2.按钮上绑上一个事件。 3.编写事件&#xff0c;并输出答案 --><html><…

模拟移动端美团案例(react版)

文章目录 目录 概述 项目搭建 1.启动项目&#xff08;mock服务前端服务&#xff09; 2.使用Redux ToolTik(RTK)编写store(异步action) 3.组件触发action并渲染数据 一、渲染列表 ​编辑 二、tab切换类交互 三、添加购物车 四、统计区域功能实现 五、购物车列表功能实现 六、控制…

软考高级架构师:数据库模式概念和例题

一、AI 讲解 数据库模式分为三个层次&#xff1a;外模式、概念模式和内模式。这三个层次分别对应不同的抽象级别&#xff0c;帮助数据库管理员和用户以不同的视角理解数据库结构。 外模式&#xff08;用户级&#xff09;&#xff1a;是数据库用户的视图。每个用户可以通过外模…

VMware导出虚拟机vmkd格式转换qcow2

VMware虚拟机导出qcow2格式可以上传至云服务 1、需要导出的虚拟机 2、克隆虚拟机 3、选择克隆源 4、创建完整克隆 5、完成 6、找到VMware安装路径 7、找到vmware-vdiskmanager所在路径使用cmd或Windows PowerShell进入目录 进入vmware-vdiskmanager目录 cd F:\软件\VMware Wo…