【c++】gdb调试

ops/2024/10/21 23:28:46/

参考

  • https://zhuanlan.zhihu.com/p/173652671
  • gdb 多线程调试
  • https://www.cnblogs.com/binliubiao/p/15387845.html

基本调试命令

命令简写形式说明
listl查看源码
backtracebt, where打印函数栈信息
nextn执行下一行
steps一次执行一行,遇到函数会进入
finish运行到函数结束
continuec继续运行直到断点, (同时可以指定跳过当前断点的命中次数, 例如: continue 8)
breakb设置断点(可以直接指定函数名,或者文件加行数, 例如: b test_function, b demo.cpp:16)
info breakpoints显示断点信息
deleted删除断点
printp打印表达式的值
runr启动程序
untilu执行到指定行
infoi显示信息, 例如查看断点信息: info breakpoints
ignore 1 5忽略1号断点5次, 断点编号,可以通过info breakpoints
helph帮助信息

调试

$ ps -ef |grep .*gauss.*
xxx   298366 255537  1 02:18 pts/1    00:00:25 gaussdb -D /home/xxx/db --single_node -p 28922
// 通过进程名查看需要跟踪的进程ID$ gdb attach 298366(gdb) b hnswinsert_internal
Function "hnswinsert_internal" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (hnswinsert_internal) pending.
// 利用函数名建立断点,如果函数名在共享库中,不能被加载到,可以选择pending(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   <PENDING>  hnswinsert_internal
// 查看断点信息(gdb) c
Continuing.
Program received signal SIGUSR2, User defined signal 2.
[Switching to Thread 0x7f4517bfb700 (LWP 298386)]
0x00007f4612514ddd in poll () from /usr/lib64/libc.so.6
// 可以发现,执行c(continue)之后并没有停止在断点,这是因为被其它信号中断了,例如上面的信号`SIGUSR2`
// 可以执行下面的命令来忽视这些特定的信号,例如忽视`SIGUSR2`(gdb) handle SIGUSR2 nostop noprint pass
Signal        Stop	Print	Pass to program	Description
SIGUSR2       No	No	Yes		User defined signal 2(gdb) c
Continuing.
[New Thread 0x7fd2425ef700 (LWP 303881)]
[Thread 0x7fd2425ef700 (LWP 303881) exited]
[New Thread 0x7fd2425ef700 (LWP 303882)]
[Thread 0x7fd2425ef700 (LWP 303882) exited]
[New Thread 0x7fd2425ef700 (LWP 303893)]
[Switching to Thread 0x7fd2425ef700 (LWP 303893)]Breakpoint 1, hnswinsert_internal (index=0x7fd23f1aa2b0, values=0x7fd2425bae20, isnull=0x7fd2425bad90, heap_tid=0x7fd23fdc8068, heap=0x7fd23f1acee8, checkUnique=UNIQUE_CHECK_NO) at src/hnswinsert.cpp:815
815	{
// 可以发现,忽视其它中断信号后,执行`c`可以直接到达预设的断点处(gdb) c
Continuing.
[New Thread 0x7fd23e993700 (LWP 304442)]Breakpoint 1, hnswinsert_internal (index=0x7fd23f1aa2b0, values=0x7fd2425bae20, isnull=0x7fd2425bad90, heap_tid=0x7fd23fdc8068, heap=0x7fd23f1acee8, checkUnique=UNIQUE_CHECK_NO) at src/hnswinsert.cpp:815
815	{
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00007fd23e9b8cff in hnswinsert_internal(RelationData*, unsigned long*, bool*, ItemPointerData*, RelationData*, IndexUniqueCheck) at src/hnswinsert.cpp:815breakpoint already hit 2 times
// 查看断点信息,并可以看到断点已经命中的次数(gdb) ignore 1 1830
Will ignore next 1830 crossings of breakpoint 1.
// 如果断点在循环中, 需要被大量重复执行, 如果我们只需要查看其中某一次,例如1831次的情况,可以利用`ignore`来忽视前面`1380`次
// 的断点(gdb) c

http://www.ppmy.cn/ops/118984.html

相关文章

MyBatis 学习总结

1. MyBatis 简介 MyBatis 是一款优秀的持久层框架&#xff0c;简化了 Java 程序与数据库的交互&#xff0c;通过 SQL 映射将 SQL 语句与 Java 对象关联起来。它基于传统 JDBC 的操作进行了封装&#xff0c;使得开发者无需手动编写复杂的 SQL 操作代码。 MyBatis 的特点包括&a…

【软件工程】模块化思想概述

一、定义 模块化&#xff08;modularization&#xff09;&#xff0c;也称为模组化&#xff0c;是产品设计以及项目管理中被广泛使用的一种设计理念。 模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程&#xff0c;有多种属性&#xff0c;分别反映其内部…

21.1 k8s接口鉴权token认证和prometheus的实现

本节重点介绍 : k8s接口鉴权方式serviceaccount和token的关系手动curl访问metrics接口 k8s对象接口鉴权 以容器基础资源指标为例 对应就是访问node上的kubelet的/metrics/cadvisor接口&#xff0c;即访问https://nodeip:10250/metrics/cadvisor 直接curl访问 会报错&…

详细指南:如何有效解决Windows系统中msvcp140.dll丢失的解决方法

如果你在使用Windows系统时遇到“msvcp140.dll丢失”的错误提示&#xff0c;通常是因为你的计算机上缺少或损坏了msvcp140.dll文件。msvcp140.dll是Microsoft Visual C Redistributable包的一部分&#xff0c;许多应用程序和游戏需要它来正常运行。以下是几种解决msvcp140.dll丢…

TortoiseSVN提交时忽略某些文件夹,不让它在提交列表中出现

1.首先右键&#xff0c;点击属性 2.新建一个忽略规则&#xff0c;点击确定即可

这一篇文章!让你知道华为认证含金量究竟有多高!

一、华为认证介绍 华为认证系华为技术有限公司基于“平台生态”之战略&#xff0c;围绕“云-管-端”协同的全新 ICT 技术架构&#xff0c;精心塑造的业界于 ICT 领域覆盖范围至为广泛的认证体系。 其旨在培育并认证兼具专业技术知识与实践能力的 ICT 人才&#xff0c;为行业的…

基于SpringBoot+Vue+MySQL的美食信息推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 在数字化时代&#xff0c;随着人们对美食文化的热爱与追求不断增长&#xff0c;美食信息推荐系统成为了连接食客与美食之间的重要桥梁。面对海量的美食信息&#xff0c;用户往往难以快速找到符合个人口味和需求的美食。因此&…

jmeter进行性能测试实践

设置场景接口 一、通过抓取一个场景的接口&#xff08;抓包&#xff09; 自己抓取需要的接口&#xff0c;进行依赖 流程&#xff1a;1.在网页上F12抓取登录页面和登出页面的URL。2.在jemeter设置线程组&#xff0c;添加http请求输入URL等。3.查看结果数 二、通过boday录制 …