编译项配置:
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:linenum
或b 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