目的:找到可执行文件的位置并使用gdb调试cpp及调试qt程序

GDB是一个功能强大的调试工具,用于调试 C、C++ 和其他编程语言的程序。它允许你在程序运行时检查和修改程序的内部状态,帮助你找到和修复错误

对于显示的语法错误编译器可以直接检测出错误,gdb主要是用于对非语法的逻辑性错误导致的程序崩溃进行调试,这里主要对调试过程进行说明,核心是展示gdb对qt以及rosqt的使用

对于初学者来说gdb的使用的关键在不熟悉的情况下找到该项目可执行文件的路径

GDB主要功能

1.设置断点

 你可以在程序的特定位置设置断点,使程序在执行到该位置时暂停。断点可以设置在函数、行号或条件表达式上。(这里的(gdb)是使用在终端中输入gdb后进入gdb模式的前缀并非指令)

(gdb) break main

(gdb) break my_program.cpp:10

(gdb) break my_function if x > 5

2.运行和控制程序

 你可以启动、暂停、继续和停止程序的执行

(gdb) run

(gdb) continue

(gdb) step

(gdb) next

(gdb) finish

(gdb) kill

3.查看和修改变量

 你可以查看和修改程序中的变量值。

(gdb) print x

(gdb) set x = 10

4.查看调用堆栈

你可以查看程序的调用堆栈,了解函数调用的顺序和参数。

(gdb) backtrace

5.调试多线程程序

 GDB 支持调试多线程程序,你可以查看和控制各个线程。

(gdb) info threads

(gdb) thread 2

 使用方式

调试普通cpp程序

1.编译程序

程序必须是以调试模式编译的,这样 GDB 才能读取调试信息

例如g++ -g -o my_program my_program.cpp

2.启动GDB

编译完成后,使用 GDB 启动你的程序:

gdb ./my_program

设置断点: 在程序的特定位置设置断点(简单调试可有可无)。

break main

3.运行程序 

启动程序的执行。

run

4.调式完成后退出gdb

quit

调试qt或rosqt等程序

1.首先查找一下要运行的包可执行文件路径

一般在工作空间下build/devel/lib/或./devel/lib/下

也可以通过如下命令查找

cd qt_ws//进入工作空间目录下

find . -type f -executable -name "serailDemo"//查找该目录下名为serailDemo的程序

gdb ./devel/lib/serailDemo/serailDemo** //进入该路径的gdb

2.进入之后调试方法与前面一样

使用示例如下:

b959d9e366534957960235503fe5c904.png这是爆出程序试图访问未分配或无效的内存地址。根据 backtrace 输出,错误发生在 QSerialPortInfo::portName() 函数中,可能是因为你在调用 portName() 时,QSerialPortInfo 对象无效或未正确初始化。

实际上是我在没有检测到有效串口和且没有输入串口名的情况下直接进行了打开串口的操作,导致了程序崩溃。

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐