簡體   English   中英

GDB 跳過命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM