GDB高级使用技巧

ROS2 gdb调试实战:从基础到高级技巧 本文详细介绍了使用gdb调试ROS2程序的实战技巧,涵盖从编译设置(Debug/RelWithDebInfo模式)、两种启动调试方法(直接调试与Launch文件集成),到核心gdb命令使用、多线程调试以及核心转储分析。文章旨在帮助开发者高效定位和解决ROS2节点崩溃、死锁等复杂问题,提升调试效率。 阅读详情

前面两篇gdb的文章基本上已经介绍的差不多了,但是还有一些可以提高调试效率的方式需要介绍一下。

1.调试宏定义

如果gcc只是-g选项,那么宏定义是不能被调试的,-g是有等级的,需要使用-gdwarf-2 -g3才可以调试宏定义

如果宏定义只是普通的数值替换 通过p 宏定义就可以打印出值

如果宏定义是一系列语句的组合,可通过macro expand 宏定义 把对应的宏语句打印出来,宏定义里的参数可以是任意参数

2.调试coredump

程序运行可能由于段错误导致运行失败,为了定位到错误需要查看程序运行的错误状态

首先需要让程序可以生成core文件,输入命令 ulimit -c ,如果输出是0表示不会生成core文件

通过命令 ulimit -c unlimited 即可产生core文件

gdb core文件即可查看程序错误信息

3.测试函数

gdb可以直接执行函数并传递参数查看结果,而且不影响原有程序,非常适合单元测试

但是如果函数内有全局变量并且被修改,那么不建议使用,因为会改变全局变量的值

通过 call <函数名>(函数参数) 即可查看函数返回值

假如函数参数是一个复杂的结构体,需要用特殊方式构造参数

通过 set $temp = ({SOME_TYPE *}malloc(sizeof(SOME_TYPE))) 开辟临时空间,启动SOME_TYPE可以是struct union enum

通过 set $temp->成员 = 1  这种方式填充数据

call <函数名>($temp) 即可查看结果

4.函数桩

假设函数的返回值我们临时想改变,可以在被调试的函数内直接 return value 即可改变原有函数的返回值

5.gdb打印信息不全

有时候打印的数据太长gdb会用...省略后面的数据

通过命令 set print elements 0 即可显示全部信息

6.tui界面

gdb可以使用tui界面,边看代码边调试,毕竟list命令不方便

进入tui界面一种是gdb -tui <可执行程序>

另一种是gdb <可执行程序>后 输入 ctrl + x 和 ctrl + a,退出是同样的命令

tui界面如果经常数据会导致界面混乱,可以通过ctrl + l 刷新界面

在tui界面方向键不能查看历史命令,需要使用ctrl p/n 往回/往前查看历史命令

移动光标通过 ctrl b/f 往左/往右移动

tui查看汇编可以通过 layout asm

返回源码通过 layout src

tui可以同时查看源码和汇编,通过命令ctrl + x 和 数字2,注意数字2没有ctrl

如果想恢复成1个窗口,通过命令ctrl+x 和数字1

【GDB】一文掌握 GDB 详细用法(GDB 命令速查) GDB(GNU Debugger)是Linux/Unix系统下强大的命令行调试工具,用于分析程序运行时的内存状态、执行流程和故障定位。就会被压入栈中,栈帧包含了该函数的局部变量、参数、返回地址和其他信息,当函数执行完毕后,这个栈帧会被弹出栈并销毁。调用的函数如果存在全局变量、静态变量的修改,在函数返回后会恢复到调用之前的值,这两个调用不会影响程序的状态。显示运行时将要或已经传递给程序的参数。每当一个函数被调用时,一个新的栈帧。在启动进程前,添加环境变量。在启动进程前,清除环境变量。连接到正在运行的进程。 阅读详情

相关推荐

专栏序言-GDB高级调试技巧实战

GDB高级调试技巧实战--快速进入高手行列

深山老宅的虚拟空间 3967

gdb 调试的 9 条高级技巧

gdb 是一种强大的命令行调试器,可以用来检查和修改正在运行的程序。除了常用的 file、b、s、n、q、disp、p 等命令,gdb 还有许多高级技巧,可以让调试更加方便快捷。

sinat_28305511的博客 2250

LabVIEW事件结构避坑指南:为什么你的‘确定按钮’事件有时会失灵?

本文深入探讨了LabVIEW事件结构中'确定按钮'事件失灵的常见原因及解决方案。从事件队列机制到事件类型选择,详细分析了事件丢失的五大原因,包括事件处理耗时过长、事件类型选择不当等,并提供了优化登录界面案例的实用建议。掌握这些技巧可显著提升LabVIEW用户界面的响应可靠性。

weixin_42548888的博客 355

10个常用GDB高级技巧,让调试更加方便快捷

1)查看宏 默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3-gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令p,这和查看变量的值的方法相同,如果想查看宏的定义,使用 “-macroexpand”命令即可 2) 如果执行一连串命令? 这个借助命令“source”即可,“source”的参数为一个存有一

lida2003的专栏 7836

PIDNet实战:如何在Cityscapes数据集上实现93.2 FPS的实时语义分割(附完整训练代码)

本文提供了在Cityscapes数据集上实现实时语义分割模型PIDNet的完整工程实践指南。PIDNet凭借其独特的比例-积分-微分三分支架构,在CVPR 2023上取得了速度与精度的出色平衡。文章详细介绍了从环境配置、数据预处理、模型训练到性能优化与部署的全流程,并分享了实现93.2 FPS高推理速度的关键技巧与代码。

weixin_29047919的博客 375

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 582

gdb 调试高级命令

原文链接:http://blog.youkuaiyun.com/hejinjing_tom_com/article/details/9472041 1. gdb 运行初始化命令 -x usercmd     在.gdbinit 初始化命令中, 可以用#(同bash 注释符合)来注释     可以用source 在启动gdb 后运行gdb 命令文件     可以用file 在启动gdb 后再

当今明月的专栏 1969

Android应用开发从零到一:基于Kotlin与Jetpack Compose的完整实践指南

移动应用开发的核心在于构建一个架构清晰、可维护且可扩展的应用基础。理解应用架构的原理,如关注点分离和数据驱动UI,是实现高质量应用的关键技术价值。在现代Android开发中,Kotlin语言凭借其空安全特性和协程,能有效提升代码的健壮性与开发效率。Jetpack Compose作为声明式UI框架,代表了UI开发的未来方向,与Kotlin协程深度集成,简化了复杂交互界面的构建。这些技术共同服务于个人任务管理、企业工具等多种应用场景。本文以构建一个完整的个人任务管理应用为例,系统阐述从环境搭建、UI构建、数据持

weixin_32667955的博客 313

gdb x命令_GDB高级技巧:边Debug边修复BUG,无需修改代码,无需重新编译

友情提醒:本文介绍的调试技巧非常实用,但为了讲解清楚,篇幅较长,请耐心看完,我保证你定会有收获!引言程序调试时,你是否遇到过下面几种情况:1、经过定位,终于找到了程序中的一个BUG,满心欢喜地以为找到了root cause,便迫不及待地修改源码,然后重新编译,重新部署。但验证时却发现,真正的问题并没有解决,代码中还隐藏着更多的问题。2、调试时,我们找到代码中一个可疑的地方,但是不能100%确定这真...

weixin_39539563的博客 653

YOLOv8模型INT8量化实战:解决sigmoid输出归零的坑(附代码修改)

本文详细介绍了YOLOv8模型INT8量化过程中遇到的sigmoid输出归零问题及其解决方案。通过修改模型导出代码、优化ONNX量化流程,并提供完整的部署优化技巧,帮助开发者在边缘计算设备上实现高效的模型推理。文章还包含量化效果验证和常见问题排查方法,助力开发者快速解决实际部署中的难题。

vvv99的博客 253

OpenCloudOS9操作系统搭建Confluence8.2.1+Jira企业级WIKI

Atlassian Confluence是一个专业的企业知识管理与协同软件,可用于构建企业wiki

背锅神童的博客 1023

GDB高级技巧

GDB高级用法

一见 8807

ABB变频器使用PROFINET IO通信模块时的激活方法

ABB变频器使用PROFINET IO通信模块时的激活方法

Robot_PLC_HMI_Automation 2734

GDB/CGDB 调试器使用指南:从入门到高级技巧

本文详细介绍了Linux下GDB调试工具的使用方法。主要内容包括:1. GDB简介与安装;2. GCC编译选项对比(带-g与不带-g的区别);3. GDB基本调试命令(程序运行、断点管理、变量查看等);4. 高级调试技巧(条件断点、多线程调试等);5. CGDB前端工具的使用;6. 实际调试示例演示;7. 调试原理分析;8. 常见问题解决方案。文章通过大量具体示例,帮助开发者掌握GDB调试的核心技能,提高程序调试效率。重点强调了带-g编译的重要性,以及断点设置、变量查看等关键调试技巧。

祯的博客 7700

双目深度相机--10.双目视觉的主要步骤讲解分析

双目视觉技术通过模拟人眼原理,利用两个相机从不同视角采集图像,实现三维坐标计算。其核心流程包括:1)系统标定,消除相机畸变并建立坐标映射关系;2)图像同步采集与预处理;3)立体匹配,寻找左右图像对应点;4)基于视差图的深度计算;5)三维重建生成点云或网格模型;6)结果应用如目标测距、三维建模等。关键技术难点在于精确标定和准确匹配,这两步直接影响最终深度计算的精度。该技术广泛应用于自动驾驶、工业检测、VR等领域,实现了从二维图像到三维空间的精准转换。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 625

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

gdb断点高级技巧

 条件断点 设置一个条件断点,条件由cond指定;在gdb每次执行到此 断点时,cond都被计算。当cond的值为非零时,程序在断点处停止。 用法: break [break-args] if (condition) 例如: break main if argc > 1 break 180 if (string == NULL && i break test.c:34 if

zhangmiaoping23的专栏 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

gdb高级调试技巧

1. 反向调试 gdb支持程序反向执行。 record让程序开始记录反向调试所必要的信息 rn :reverse next rc: reverse continue ,Continue program being debugged but runit in reverse record stop:停止记录

hzgdiyer的专栏 1739

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

gdb 高级技巧

1) 查看宏 默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令p,这和查看变量的值的方法相同,如果想查看宏的定义,使用“-macro expand”命令即可 2) 如果执行一连串命令? 这个借助命令“source”即可,“source”的参数为一个存有一串

云,无处不在 雾,是下一代 1186

GDB高级技巧—反向调试,让代码回退的方法

反向调试是一种高级调试技术,可以让程序已经执行了一段时间后,回退到过去的状态并重新执行。这意味着你可以回到程序执行中的任何点,查看变量的值、堆栈跟踪以及程序执行路径。反向调试可以让我们快速、准确地定位出程序中的错误或异常的根本原因。简单来说,就是一种可以让程序逻辑逆序执行的调试技术。通过它,你可以随时中断程序的正常执行,然后逆序执行,让程序回到过去,并可以查看任意时间点的任意信息。

叶新东老师的博客 856

GDB 高级调试技巧:从秒杀段错误到智能断点,让你的调试效率飙升

本文介绍了GDB调试器的高级使用技巧,重点讲解了如何快速定位段错误、调试带参数程序以及高效处理循环代码。通过run命令可精准捕获段错误位置;setargs和run <args>能模拟命令行参数传递;条件断点(break if)和变量跟踪(display)可智能调试循环代码。此外还介绍了断点管理、变量类型查看等实用功能,帮助开发者显著提升调试效率。这些技巧特别适合处理C/C++程序中的复杂调试场景。

Web安全工具库 912

基于JLink调试STM32F407的GDB高级技巧

本文深入讲解如何使用JLink与GDB协同调试STM32F407,涵盖环境搭建、断点控制、HardFault分析、RTT日志、DWT性能测量等核心技术,助力开发者实现生产级嵌入式调试能力。

i1j2k的博客 1195
上一篇: centos7搭建docker私人仓库harbor
下一篇: linux查看cpu和内核是否支持大页内存
NUAA丶无痕
博客等级 码龄9年 154粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值