Tôi có một cách mà tôi đã luôn luôn làm điều này, nhưng nhìn thấy câu hỏi của bạn làm cho tôi tò mò để xem nếu có một cơ chế tốt hơn. Tôi không tìm thấy gì cả. Bạn có thể luôn đặt một điểm ngắt bên trong hàm bạn đang bước vào, nhưng TRƯỚC KHI bạn thực hiện bước này, hãy sử dụng lệnh 'lệnh' để báo cho gdb biết rằng bạn không muốn nó in bất cứ thứ gì cả khi nó chạm breakpoint đó. Một ví dụ sẽ làm cho mọi thứ rõ ràng hơn ...
Bạn sẽ nhận thấy rằng khi tôi chạy chương trình, tôi dừng lại ở điểm ngắt trên dòng 10 (gọi tới foo) và nó in ngữ cảnh hiện tại của tôi. Sau khi phát lệnh 'lệnh 2' và yêu cầu gdb im lặng trên điểm ngắt đó, không có gì được in ra khi tôi nhấn nó. Tôi đã làm backtrace (bt) chỉ để cho thấy rằng tôi đã được nơi tôi muốn được.
Hope this helps:
> cat tmp.cpp
#include <stdio.h>
void foo(int a)
{
printf ("%d\n", a);
}
int main()
{
foo(0);
return 0;
}
> g++ -g tmp.cpp
> gdb a.out
GNU gdb Fedora (6.8-27.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
(gdb) break 10
Breakpoint 1 at 0x8048491: file tmp.cpp, line 10.
(gdb) break 5
Breakpoint 2 at 0x804846a: file tmp.cpp, line 5.
(gdb) run
Starting program: /home/ronb/software/a.out
Breakpoint 1, main() at tmp.cpp:10
10 foo(0);
(gdb) commands 2
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>silent
>end
(gdb) c
Continuing.
(gdb) bt
#0 foo (a=0) at tmp.cpp:5
#1 0x0804849d in main() at tmp.cpp:10
(gdb)