GDB调试cmake工程

编译项配置:

CMakelists.txt配置:
在其中添加:

set(CMAKE_BUILD_TYPE DEBUG)
add_definitions(-g)

或:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g")

或:
执行cmake时,添加-DCMAKE_BUILD_TYPE=Debug编译选项。

cmake -DCMAKE_BUILD_TYPE=Debug  ..

此方法可以不用改变CMakelist.txt。

https://blog.csdn.net/weixin_42322256/article/details/124638725
https://blog.csdn.net/heibao111728/article/details/131092329

gdb使用

gdb --args ./exefile arg1 args2
或:
gdb ./exefile
set args arg1 args2

本地动态库加载

在gdb运行之后,在gdb的输入界面

(gdb) r 或run
(gdb) load /pathtoso/xxx.so
(gdb) b file:linenum或 b func

此时,可以将动态库对应的源文件及符号表导入到gdb,从而可以通过b file:linenumb func来设置断点

此外,可以手动设置源文件搜寻路径及导入符号表

(gdb) sharedlibrary <要调试的动态库> # 将动态库的符号读入gdb,为了你能找到变量和函数名
(gdb) breakpoint <要调试动态库的断点位置,如 src/test.cpp:100 >

https://blog.csdn.net/fireroll/article/details/107780929

其他GDB常用命令

r:run,执行程序
n:next,下一步,不进入函数
s:step,下一步,会进入函数
b:breakponit,设置断点
l:list,查看源码
c:continue,继续执行到下一断点
bt:backtrace,查看当前调用栈
p:print,打印查看变量
q:quit,退出 GDB
whatis:查看对象类型
info threads:查看线程
info breakpoints(info b):查看所有的断点
info locals:查看局部变量
info args:查看函数的参数值及要返回的变量值
info frame:堆栈帧信息

在遇到段错误等问题时,可以利用bt打出符号表,进而可知出现段错误的地方。
https://blog.csdn.net/Jailman/article/details/125758651

多线程调试

(1)查看可切换调试的线程:info threads
(2)切换调试的线程:thread 线程id
(3)只运行当前线程:set scheduler-locking on
(4)运行全部的线程:set scheduler-locking off
(5)指定某线程执行某gdb命令:thread apply 线程id gdb_cmd
(6)全部的线程执行某gdb命令:thread apply all gdb_cmd

https://blog.csdn.net/weixin_42158742/article/details/113100151

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值