gdb info frame信息解释
執行如下指令:
$gcc -o test.o test.cc -g$gdb test.o -q (gdb) b 4 (gdb) r Starting program: /home/xcl/Doc/test/test.o show1 show2Breakpoint 1, show3 () at test.cc:5 5 puts("show3"); (gdb) backtrace #0 show3 () at test.cc:5 #1 0x0000555555554662 in show2 () at test.cc:11 #2 0x000055555555467a in show1 () at test.cc:17 #3 0x0000555555554686 in main () at test.cc:22 (gdb) info frameStack level 0, frame at 0x7fffffffdac0:rip = 0x55555555463e in show3 (test.cc:5); saved rip = 0x555555554662called by frame at 0x7fffffffdad0source language c++.Arglist at 0x7fffffffdab0, args: Locals at 0x7fffffffdab0, Previous frame's sp is 0x7fffffffdac0Saved registers:rbp at 0x7fffffffdab0, rip at 0x7fffffffdab8進入正題!
Stack level 0, frame at 0x7fffffffdac0:
含義:當前棧的起始地址 0x7fffffffdac0 。
rip = 0x55555555463e in show3 (test.cc:5); saved rip = 0x555555554662
含義:
- 0x55555555463e 表示當前的 rip 寄存器的值(test.cc:5)。
- 0x555555554662:表示調用本函數(當前調用函數為 show3)的指令的地址,即:0x555555554662 應該表示的是源程序第 11 行翻譯成匯編后的地址。
called by frame at 0x7fffffffdad0
含義:這個表示上一個棧幀的地址,因為當前函數是 show3,所以這個地址表示 show2 的棧的地址,可以用命令查看一下 show2 的棧地址。
source language c++.
含義:源程序是 c++ 語言。
Arglist at 0x7fffffffdab0, args:
含義:存放函數參數的地址從 0x7fffffffdab0 開始。
Locals at 0x7fffffffdab0, Previous frame's sp is 0x7fffffffdac0
含義:存放函數局部變量的地址從 0x7fffffffdab0 開始。
Saved registers:
rbp at 0x7fffffffdab0, rip at 0x7fffffffdab8
含義:調用函數的過程中,壓棧時保存的相關寄存器的值。
其他
查看上一個棧幀的信息。
(gdb) backtrace
#0? show3 () at test.cc:5
#1? 0x0000555555554662 in show2 () at test.cc:11
#2? 0x000055555555467a in show1 () at test.cc:17
#3? 0x0000555555554686 in main () at test.cc:22
(gdb) select-frame 1
(gdb) info frame
??? Stack level 1, frame at 0x7fffffffdad0:
??? rip = 0x555555554662 in show2 (test.cc:11); saved rip = 0x55555555467a
??? called by frame at 0x7fffffffdae0, caller of frame at 0x7fffffffdac0
??? source language c++.
??? Arglist at 0x7fffffffdac0, args:
??? Locals at 0x7fffffffdac0, Previous frame's sp is 0x7fffffffdad0
??? Saved registers:
??? rbp at 0x7fffffffdac0, rip at 0x7fffffffdac8?
?可以發現,兩個藍色部分的地址是一樣的。
?
參考:https://blog.csdn.net/xiayu0912/article/details/6311394
?
(SAW:Game Over!)
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的gdb info frame信息解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cpp / __builtin_expe
- 下一篇: signal(SIGCHLD, SIG_