Perintah info frame
Menampilkan informasi lanjutan tentang suatu frame stack.
Sintaks
info frame
info frame [Nomor frame]
info frame [Alamat frame]
info frame [Nomor frame]
info frame [Alamat frame]
Parameter
- Nomor frame
- Menentukan nomor frame berbasis nol yang akan digunakan untuk menampilkan informasi frame. Jika tidak disertakan, perintah info frame akan menampilkan informasi tentang frame saat ini yang dipilih oleh perintah frame.
- Alamat frame
- Menentukan alamat memori dari frame yang akan ditampilkan. Alamat frame adalah alamat lokasi memori setelah kata terakhir yang dimiliki oleh frame tersebut. Contohnya, pada sistem x86, alamat frame akan menjadi nilai dari register ebp + 8 (untuk memperhitungkan nilai sebelumnya yang disimpan dari ebp dan alamat pengembalian yang didorong oleh instruksi panggilan yang dianggap sebagai bagian dari frame).
Keterangan
Perintah info frame menampilkan banyak informasi tingkat rendah tentang suatu frame. Gunakan perintah info args dan info locals untuk melihat output yang lebih ringkas.
Contoh
Kami akan mengilustrasikan penggunaan perintah info frame menggunakan fungsi rekursif di bawah ini:
#include
void level0()
{
printf("Reached level 0\n");
}
void test(int level)
{
if (level > 0)
{
int prevLevel = level - 1;
printf("Level %d\n", level);
test(prevLevel);
}
else
{
level0();
}
}
int main()
{
test(5);
return 0;
}
Kami akan menetapkan breakpoint pada fungsi level0() dan menggunakan perintah info frame untuk menampilkan berbagai informasi tingkat rendah tentang berbagai frame:
(gdb) break level0
Breakpoint 1 at 0x8048452: file recursion.cpp, line 5.
(gdb) run
Starting program: /home/testuser/recursionTest
Level 5
Level 4
Level 3
Level 2
Level 1
Breakpoint 1, level0 () at recursion.cpp:5
5 printf("Reached level 0\n");
(gdb) backtrace
#0 level0 () at recursion.cpp:5
#1 0x0804849a in test (level=0) at recursion.cpp:17
#2 0x08048493 in test (level=1) at recursion.cpp:14
#3 0x08048493 in test (level=2) at recursion.cpp:14
#4 0x08048493 in test (level=3) at recursion.cpp:14
#5 0x08048493 in test (level=4) at recursion.cpp:14
#6 0x08048493 in test (level=5) at recursion.cpp:14
#7 0x080484b1 in main () at recursion.cpp:22
(gdb) select-frame 2
(gdb) info frame
Stack level 2, frame at 0xbffff5c0:
eip = 0x8048493 in test (recursion.cpp:14); saved eip 0x8048493
called by frame at 0xbffff5f0, caller of frame at 0xbffff590
source language c++.
Arglist at 0xbffff5b8, args: level=1
Locals at 0xbffff5b8, Previous frame's sp is 0xbffff5c0
Saved registers:
ebp at 0xbffff5b8, eip at 0xbffff5bc
(gdb) info registers
eax 0x0 0
ecx 0x0 0
edx 0x0 0
ebx 0xb7fc3000 -1208209408
esp 0xbffff590 0xbffff590
ebp 0xbffff5b8 0xbffff5b8
esi 0x0 0
edi 0x0 0
eip 0x8048493 0x8048493
eflags 0x282 [ SF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
(gdb) info frame 3
Stack frame at 0xbffff5f0:
eip = 0x8048493 in test (recursion.cpp:14); saved eip 0x8048493
called by frame at 0xbffff620, caller of frame at 0xbffff5c0
source language c++.
Arglist at 0xbffff5e8, args: level=2
Locals at 0xbffff5e8, Previous frame's sp is 0xbffff5f0
Saved registers:
ebp at 0xbffff5e8, eip at 0xbffff5ec
(gdb) info frame 0xbffff5f0
Stack frame at 0xbffff5f0:
eip = 0x8048493 in test (recursion.cpp:14); saved eip 0x8048493
called by frame at 0xbffff620, caller of frame at 0xbffff5c0
source language c++.
Arglist at 0xbffff5e8, args: level=2
Locals at 0xbffff5e8, Previous frame's sp is 0xbffff5f0
Saved registers:
ebp at 0xbffff5e8, eip at 0xbffff5ec