还有一个命令(disassemble)你可以查看源程序的当前执行时的机器码,这个命令会把目前内存中的指令dump出来。如下面的示例表示查看函数func的汇编代码。
(gdb) disassemble func
Dump of assembler code for function func:
0x8048450 <func>:push?p
0x8048451 <func1>:mov%esp,?p
0x8048453 <func3>:sub$0x18,%esp
0x8048456 <func6>:movl$0x0,0xfffffffc(?p)
0x804845d <func13>:movl$0x1,0xfffffff8(?p)
0x8048464 <func20>:mov0xfffffff8(?p),?x
0x8048467 <func23>:cmp0x8(?p),?x
0x804846a <func26>:jle0x8048470 <func32>
0x804846c <func28>:jmp0x8048480 <fun8>
0x804846e <func30>:mov%esi,%esi
0x8048470 <func32>:mov0xfffffff8(?p),?x
0x8048473 <func35>:add?x,0xfffffffc(?p)
0x8048476 <func38>:incl0xfffffff8(?p)
0x8048479 <fun1>:jmp0x8048464 <func20>
0x804847b <fun3>:nop
0x804847c <fun4>:lea0x0(%esi,1),%esi
0x8048480 <fun8>:mov0xfffffffc(?p),?x
0x8048483 <func51>:mov?x,?x
0x8048485 <func53>:jmp0x8048487 <func55>
0x8048487 <func55>:mov?p,%esp
0x8048489 <func57>:pop?p
0x804848a <func58>:ret
End of assembler dump.
查看运行时数据
———————
在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的式是:
print <expr>
print /<f> <expr>
<expr>是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),<f>是输出的式,比如,如果要把表达式按16进制的式输出,那么就是/x。
一、表达式
print和许多GDB的命令一样,可以接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,既然是表达式,那么就可以是当前程序运行中的const常量、变量、函数等内容。可惜的是GDB不能使用你在程序中所定义的宏。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40593-10.html
拉森号可不能说是老旧军舰