【Linux C】第九章 GDB调试技术

来源:互联网 发布:matlab中遗传算法代码 编辑:程序博客网 时间:2024/06/05 16:06
使用gdb之前,编译程序是需要加 –g 选项。
1. List 不带参数显示main前后的10行内容
a) list <line-number>
b) list  <line-number1,line-number2>
2. run  <arg1  arg2  arg3…….> 其参数可以包括输入输出重定向及通配符。
3. show args 查看上次运行时设置的参数(也是下次运行时的缺省参数)。
4. set  args  change-arg1  change-arg2 用于重新设置参数。
5. 关于断点 breakpoint
a) Break  <line-number> 设置某一行为断点。
b) 避免将断点设置在空行或者注释行上。否则被就近设置在该行下第一个有效语句行。
c) Break  <function-name> 设置某一函数入口为断点。程序执行至调用函数前停止。
d) Break  <line-number or func> if  <conditional expression> 当在此断点表达式为真时,启动断点功能。
e) Break  <filename:line-number or  filename:func-name> 在某个源文件下设断点。
f) Info break 查看断点信息:num, info,disp, enable,address,what等状态。
g) Delete breakpoint  <point-number>  删除已设置对应num断点
h) Enable  breakpoint <point-number>  disable breakpoint <point-num> 使能/禁止对应断点。
i) Clear 无参数:表示删除上次停止处断点。 Clear <num> 删除指定行上的所有断点。
j) Watch 为观察点(数据断点)。 Watch  <condition>。  断点是在cpu到某一地址取指令时发生中断。数据断点CPU到某一地址去读写数据时中断。
6. Next 用来一步步执行for 循环 
7. Step 单步执行。
8. Gdb下运行shell命令: shell  <command> <arg1 … >
9. print
a) Print  <variable-name> 查看当前作用域&生存期下的变量。
b) Print <file::variable> 或 print <function::variable> 局部变量全局变量冲突时,查看某文件某函数下的变量。Eg.  print  ‘file2.c’::sum::x
c) 对程序中函数调用: print  function(arg1,arg2..) 调用时指定形参的值。
d) Print <expression>计算/查看 表达式的值(根据当前常量变量函数等),但不可以使用宏。 
e) Print <array-name>查看数据所有元素 print *array@length 查看以array地址开始长度为length的内存。
f) 变量输出格式:x(16)、d(10)、u(16)、o(8)、t(2)、a(16)、c(char)、f(float).                       eg.    p/c i
10. Examine 查看内存  examin /nfu <address>
a) N 表示向后显示n个单位
b) F 表示输出格式 s表示字符串,i表示指令地址,其余参考print输出格式。
c) U表示每个单位字节数 b单字节 h双字节 w四字节g八字节。
11. Display/format expression 单步跟踪时自动显示变量。Format控制输出格式,参考print。
12. $pc 表示当前指令的地址。 I 可以表示输出格式为机器指令码。Eg。 display/I $pc
13. Undisplay 删除所有自动显示。Delete display <disp-numbers> 删除指定编号。使能/禁止指定编号:Disable/enable display <disp-numbers>
14. Info display 查看display情况。
15. Set/show  print  address/array/elements/null-stop/pretty/union   on/off  print的设置选项。
16. Print的历史记录,$1,$2…….
17. 查看寄存器
a) Info registers  查看除浮点寄存器外所有寄存器
b) Info all-registers 查看所有寄存器
c) Info registers <registers-name> 查看指定寄存器的情况。
18. Gdb可以使用环境变量。类似shell。
a) Eg、set  $i=0
    Print bar[i++]->contents
19. Info locals 查看局部变量
20. Continue  程序继续执行,允许自然死亡。
0 0
原创粉丝点击