[英]GDB step over command
我有以下 C 代碼:
#include <inc/x86.h>
#include <inc/elf.h>
#define SECTSIZE 512
#define ELFHDR ((struct Elf *)0x10000) // Scratch space
void readsect(void*, unit32_t);
void readsec(uint32_t, uint32_t, uint32_t);
void bootmain(void)
{
struct Proghdr *ph, *eph;
// Read the first page off disk
readseg((uint32_t) ELFHDR, SECTSIZE*8, 0);
.
. // The rest of the code
.
}
我正在使用 GDB 來介入我的代碼,看看發生了什么。
我找到了 bootmain 0x7d0a
的地址,並在那里放置了一個斷點。
b *0x7d0a
c
上面兩條命令: b
添加斷點, c
運行直到到達斷點。
我可以看到我按預期停在0x7d0a
。
然后在幾個命令之后,我可以看到函數參數作為參數被推送到堆棧。 並呼吁readseg
。
0x7d0f push $0x0 // 0
0x7d11 push $0x1000 // 512*8 = 4096 B
0x7d16 push $0x10000 // 64 KB
0x7d1b call 0x7cd1
我如何跳過這個功能? 使用si
的下一個命令只是讓我進入readseg
函數。 我不想踏入,而是跨過去。 我嘗試在下一個命令旁邊放置一個斷點:
b *0x7d21
c
但它永遠不會回來......
我應該在不同的地址上設置斷點嗎?
我不確定。 但是,這是一種解決方法,我寧願使用我在此處的文檔中找不到的 step over 命令。
si
的“跨越”類似物稱為nexti
(也縮寫為ni
)。 這將單步執行單個匯編指令,但會跳過調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.