(11) 查看断点 info b:
# info b
举例:
(12)删除断点 delete 2 或者删除所有断点:
# 1. 删除指定的断点
delete 3
# 2. 删除所有断点
delete 回车,之后输入 y 确认删除所有断点
++ 举例:
++ delete 不接参数,就是删除所有的断点的意思。 GDB7.0 以后,这么删除所有断点的操作会被保护,就是要在回答 yes 以后,电脑才会删除所有的断点。
(13)单步执行 :
# 1. 如果遇到函数不进入到函数里面 next(n) / ni 类似于 vs2019 里的 F10 与 F11
# 2. 如果遇到函数调用,进入到函数里面, step(s) / si i 只是会机器指令所在的地址序号,而非汇编指令与指令本身,没啥意义
++ 举例:
++ 以及 s 的使用:
++ 以及 ni :
++ 以及 si :
(14**)函数调用链的回溯命令 bt** backtrace :
++ 举例:
(gdb) bt
#0 0x0804841d in foo (a=3, b=5) at example.c:10
#1 0x08048442 in bar (x=10) at example.c:16
#2 0x08048464 in main () at example.c:22
++
++ 测试一下:
(15)查看变量 p 或 print :
(gdb) p fileName=0x7fffffffe0f6
$1 = 0x7fffffffe0f6 "/work/video/sky.ts"
++ 举例:
(16) 退出: quit 。
(17)以上是基本的调试方法。对于简单的调试,已经足够了。但对于复杂的还要继续学习。查看指定内存处的数值 X :
++以及:
++ 给出咱们自己的举例:
++ 查看内存数据,可以查看,但看不懂,感觉对于调试的意义不大。接着列出当前堆栈中的数据:
(18) 链接动态库 set :
# 设置动态库的相对搜索路径
(gdb) set solib-search-path + path
# 设置动态库的绝对搜索路径
(gdb) set solib-absolute-prefix + path
(19) 继续执行程序 C :
# .继续执行到下一个断点 (恢复所有线程的执行)
(gdb) c
++ 举例在:
++ 举例:
(20) **查看函数调用栈 f 或 frame ** :
# 选择进入对应的栈
f + num
++ 以及:
++ 给出理论总结:
(21)
谢谢