簡體   English   中英

GDB 跨步功能(下一個)似乎不起作用

[英]GDB step over function (next) doesn't seem to work

我正在嘗試調試我用 C++ 編寫的程序。 這是代碼:

void a() { }
void b() { a(); }
int main() { b(); return 0; }

我使用: g++ -g3 -O0 -o cards.exe cards.cpp編譯它。

這是我的 GDB 會話的輸出:

(gdb) b main
Breakpoint 1 at 0x401421: file cards.cpp, line 10.
(gdb) r
Starting program: C:\workspace\Cards\src/cards.exe
[New thread 1624.0xa28]
Breakpoint 1, main () at cards.cpp:10
10    int main()
(gdb) n
12        b();
(gdb) n
b () at cards.cpp:5 5
void b()
(gdb) n
7        a();
(gdb) quit
The program is running.  Exit anyway? (y or n)

為什么向 GDB 發送 next 命令仍然會進入函數?

我正在使用 g++ 4.2.1-sjlj 和 GDB 6.8。

stepnext命令一次只處理一個源代碼行,因此當所有內容都在一行上時,一個next將我直接帶到main()的末尾。

3    int main() { b(); return 0; }
(gdb) n
0x00001faa in start ()

由於代碼格式不那么密集,我仍然看不到您看到的結果。 我將函數調用放在不同的行上,以使 GDB 一次一個地跳過它們。 這是我得到的:

jkugelman$ cat cards.cpp
void a() {
}

void b() {
    a();
}

int main() {
    b();
    return 0;
}
jkugelman$ g++ -g3 -O0 -o cards cards.cpp
jkugelman$ gdb ./cards
GNU gdb 6.3.50-20050815 (Apple version gdb-960) (Sun May 18 18:38:33 UTC 2008)
<snip>
Reading symbols for shared libraries .... done

(gdb) b main
Breakpoint 1 at 0x1ff2: file cards.cpp, line 9.
(gdb) r
Starting program: /Users/jkugelman/Development/StackOverflow/cards
Reading symbols for shared libraries +++. done

Breakpoint 1, main () at cards.cpp:9
9        b();
(gdb) n
10        return 0;
(gdb) n
11    }
(gdb) n
0x00001faa in start ()

我沒有答案,但我只想分享 G​​DB 在我的iMac上的行為與預期一致。 在任何一種情況下,GDB 都將調用b()視為一條指令,並且從未進入函數調用。

'n' 是next語句,不會進入函數。

要進入該函數,請使用“s”。 那是step

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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