下载此文档

gdb常用命令详解.pdf


文档分类:IT计算机 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
: .
一、显示源代码
8470 : mov 0xfffffff8(%ebp),%eax
0x8048473 : add %eax,0xfffffffc(%ebp)
0x8048476 : incl 0xfffffff8(%ebp)
0x8048479 : jmp 0x8048464
0x804847b : nop
0x804847c : lea 0x0(%esi,1),%esi
0x8048480 : mov 0xfffffffc(%ebp),%edx
0x8048483 : mov %edx,%eax
0x8048485 : jmp 0x8048487
0x8048487 : mov %ebp,%esp
0x8048489 : pop %ebp
0x804848a : ret
End of assembler dump.
查看运行时数据


在你调试程序时,当程序被停住时,你可以使用 print 命令(简写命令为 p),或
是同义命令 inspect 来查看当前程序的运行数据。print 命令的格式是:
print
print /
是表达式,是你所调试的程序的语言的表达式(GDB 可以调试多种编程语言),
是输出的格式,比如,如果要把表达式按 16 进制的格式输出,那么就是/x。


一、表达式

print 和许多 GDB 的命令一样,可以接受一个表达式,GDB 会根据当前的程序
运行的数据来计算这个表达式,既然是表达式,那么就可以是当前程序运行中的
const 常量、变量、函数等内容。可惜的是 GDB 不能使用你在程序中所定义的宏。
表达式的语法应该是当前所调试的语言的语法,由于 C/C++是一种大众型的语
言,所以,本文中的例子都是关于 C/C++的。(而关于用 GDB 调试其它语言的章
节,我将在后面介绍)
在表达式中,有几种 GDB 所支持的操作符,它们可以用在任何一种语言中。
@
是一个和数组有关的操作符,在后面会有更详细的说明。
::
指定一个在文件或是一个函数中的变量。
{}
表示一个指向内存地址的类型为 type 的一个对象。


二、程序变量在 GDB 中,你可以随时查看以下三种变量的值:
1、全局变量(所有文件可见的)
2、静态全局变量(当前文件可见的)
3、局部变量(当前 Scope 可见的)
如果你的局部变量和全局变量发生冲突(也就是重名),一般情况下是局部变
量会隐藏全局变量,也就是说,如果一个全局变量和一个函数中的局部变量同名时,
如 果当前停止点在函数中,用 print 显示出的变量的值会是函数中的局部变量的值。
如果此时你想查看全局变量的值时,你可以使用“::”操作符:
file::variable
function::variable
可以通过这种形式指定你所想查看的变量,是哪个文件中的或是哪个函数中的。例
如,查看文件 中的全局变量 x 的值:
gdb) p ''::x
当然,“::”操作符会和 C++中的发生冲突,GDB 能自动识别“::” 是否 C++的操作符,
所以你不必担心在调试 C++程序时会出现异常。

另外,需要注意的是,如果你的程序编译时开启了优化选项,那么在用 GDB
调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。
这个 是很正常的,因为优化程序会删改你的程序,整理你程序的语句顺序,剔除
一些无意义的变量等,所以在 GDB 调试这种程序时,运行时的指令和你所编写指
令就有 不一样,也就会出现你所

gdb常用命令详解 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人橘子
  • 文件大小140 KB
  • 时间2022-01-19