方法:
-
1.gdb是命令行代码调试工具:通过命令行进行操作。
-
2.一些基础命令:(可以调试一个基本的程序,当然可能没什么太大作用)
[1]启动gdb:gdb 程序名称
[2]设置断点:break 行号或者break+函数名称
[3]查看当前设置的所有断点信息:info break;
[4]设置完断点后运行程序,输入r即可;
[5]在断点后停止后单步调试,输入n即可;
[6]打印某个变量:p 变量名称
[7]如果要继续执行,则输入c
[8]查看函数堆栈:bt命令
[9]执行到退出当前函数为止:finish
[10]执行完毕后退出gdb:按q即可。 -
3.启动gdb gdb 程序名称就可以了
还有-s 从指定的文件中读取符号表和-d选项,加入一个源文件的搜索路径 -
4.帮助查看:由于gdb命令哦很多,很容易忘记,一开始使用建议多查看帮助。
输入help,就会显示命令类,再次输入help 类名,才能看到每个类中间对应的所有命令。另外如果你只记得一个命令的开头,比如i,那么可以输入i,然后按两次tab,gdb就会罗列出所有i开头的命令
对于分段式的命令同样适用,比如输入info,按两下 会出来 breakpoint或者bookmark。不仅仅是gdb内部的命令,如果是b +函数名,如果不记得函数全名了,也可以输入前缀,gdb会
进行自动联想。罗列出所有的函数名称。 -
5.gdb layout:gdb中的一种窗口显示界面,用于显示调试信息的窗口。Ctrl+x,+2切换成双窗口,+1变成单个窗口。
-
6.gdb 的r命令后面是可以加参数的,比如只想调试一个用例,可以直接加上gtest的参数就行了。./main_kirin970boston --gtest_filter=Utest_Hal_ReprocessFilter_doTransform.Utest_Hal_ReprocessFilter_doTransform_unsupport_seamlessling_02
这样就只调试这一个用例。 -
7.目前的调试方式:list+断点+s进入,然后再list+断点。效率部分是比原来的要低一些的。
-
8.p命令:输出某个变量的值,可以设置输出格式p/x十六进制,p/u 无符号,还有p/s等输出字符串,具体可以通过help命令进行查看
-
9.数据断点命令:就是在某个地址被修改或者被读取的时候,打断,可以通过bt查看调用栈,语法就是watch变量名称,或者rwatch(读取时候触发),awatch(读取或者写的时候触发)
-
10.需要设置环境变量environment才能够正常运行,可以查看init.sh文件中的内容
-
11.正常的最最常用的测试方式:依次运行如下命令:gdb xxxxx(运行到main断点处),b xxx.cpp:xxx行,r(运行),n(下一步,相当于F10),
s(进入,相当于F11),p 变量名,打印出对应的变量信息。ctrl+x,切换出对应的代码,然后可以n,回车(回车表示重复上一个步骤),这样就可以完成调试了。
详见Learn目录下的camera目录中的GDB调试指南.docx文件。 -
12.进入代码查看窗口后,上下左右键可以进行代码位置的调节。