gdb调试笔记

  作者:fbysss msn:[email protected]  blog:blog.csdn.net/fbysss 声明:本文由fbysss原创,转载请注明出处 关键字:GDB

gdb真是个好东西,linux下开发必不可少的调试工具,今日一见,相见恨晚!

  char * data;
 
4. p 命令可以查看动态指针指向的区域数据
p data@len len 为要显示的区域长度
5.x 可以查看地址中的值,假设rgbValue是一个DWORD值, x/d &rgbValue 表示以整数方式显示   x/x &rgbValue 表示以十六进制方式显示
#define   RGB(r,g,b) ((DWORD) (((BYTE) (r)|((WORD) (g)   <<   8)) | (((DWORD)   (BYTE)   (b))   <<   16)))
rgbValue = rgb(0,255,1);
(gdb)x/4t &rgbValue 表示打印四个字节,以二进制显示 显示结果:00000000        11111111        00000001        00000000
  x 按十六进制格式显示变量。   d 按十进制格式显示变量。   u 按十六进制格式显示无符号整型。   o 按八进制格式显示变量。   t 按二进制格式显示变量。   a 按十六进制格式显示变量。   c 按字符格式显示变量。   f 按浮点数格式显示变量。
x/<n/f/u> <addr>
n f u 是可选的参数。
 
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是 s ,如果是指令地址,那么格式可以是 i
u 表示从当前地址往后请求的字节数,如果不指定的话, GDB 默认是 4 bytes u 参数可以用下面的字符来代替, b 表示单字节, h 表示双字节, w 表示四字节, g 表示八字节。当我们指定了字节长度后, GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
<addr> 表示一个内存地址。
n/f/u 三个参数可以一起使用。例如:
命令: x/3uh 0x54320 表示,从内存地址 0x54320 读取内容, h 表示以双字节为一个单位, 3 表示三个单位, u 表示按十六进制显示。
print 出来的结果 并不是最真实的,比如 255 这个字节就是显示一个空值。
6.man gdb可以看到如下常用命令 
       break [file:]function
               Set a breakpoint at function (in file).
      break n 设置断点在某行
          clear n  删除断点
 
       run [arglist] -- 假如命令行有参数,写在后面
              Start your program (with arglist, if specified).
 
       bt     Backtrace: display the program stack.
 
       print expr -- 打印表达式,可以在此动态改变变量值,对调试很有好处
               Display the value of an expression.
 
       c      Continue running your program (after stopping, e.g. at a breakpoint).  --继续运行
 
       next   Execute next program line (after stopping); step over any function calls in the line. --单步跳出
 
       edit [file:]function --编辑文件,这次我没能成功,edit的时候,源文件和目录之间少了“/”不知为何
              look at the program line where it is presently stopped.
 
       list [file:]function    --列出当前语句附近的代码
              type the text of the program in the vicinity of where it is presently stopped.
 
       step   Execute next program line (after stopping); step into any function calls in the line.--执行下一步
 
       help [name]
              Show information about GDB command name, or general information about using GDB.
7.display命令可以持续跟踪变量 参考了如下日志:http://oss.lzu.edu.cn/blog/blog.php?do_showone/tid_599.html
1.在编译时要首先加上 -o outfile -g 参数才能调试,注意不要写成 -o –g outfile ,会出错 2.要记得, step 之后,断点处看到的语句才会执行。 3.print 表达式 比如 x=1 可以动态在调试时改变变量值

你可能感兴趣的:(gdb调试笔记)