如何停止继续使用GDB

时间:2010-08-14 12:00:28

标签: c gdb

我第一次使用GDB。 我跑

$ gdb

然后我正在运行

attach <mypid>

然后我看到我的进程被卡住了(这可能没问题)。现在我希望它继续运行,所以我运行

continue

我的进程继续运行 但是从这里我就陷入困境,如果我想再次看到我当前的堆栈跟踪等等。我无法继续......我试过 Ctrl - D 等但是没有什么对我有用......(只是一个猜测)。

4 个答案:

答案 0 :(得分:17)

您应该中断gdb附加的进程。 不要打断gdb本身。 通过终端中的ctrl-c中断进程 进程启动或发送进程SIGINT 通过kill -2 procid。使用procid附加进程的id。

答案 1 :(得分:4)

gdb进程中的Control + C应该会返回到命令提示符。

答案 2 :(得分:4)

这是一个简短的GDB tutorial,这里是full GDB manual

调试的重点是检查程序中有趣/可疑的部分。 Breakpoints允许您停止在某个源位置执行,watchpoints允许您在有趣的数据更改时停止。

简单示例:

(gdb) break my_function
(gdb) cont

这将在my_function的开头插入一个断点,因此当程序执行进入该函数时,程序将被暂停并且您将获得GDB提示,并且能够inspect program's state。或者您可以step通过代码。

(gdb) watch my_var
(gdb) cont

同样,但现在程序将在修改my_var值的任何位置停止。

无耻插件 - 这是我GDB presentation NYC BSD User Group的链接。希望这会有所帮助。

答案 3 :(得分:0)

中断

gdb> help interrupt
Interrupt the execution of the debugged program.
If non-stop mode is enabled, interrupt only the current thread,
otherwise all the threads in the program are stopped.  To 
interrupt all running threads in non-stop mode, use the -a option.

中断 cmd 也发送 SIGINT 到调试进程。

gdb> info thread
Cannot execute this command while the target is running.
Use the "interrupt" command to stop the target
and then try again.

gdb> interrupt
[New Thread 27138.27266]
[New Thread 27138.27267]
[New Thread 27138.27268]
[New Thread 27138.27269]
[New Thread 27138.27270]

Thread 1 "loader" received signal SIGINT, Interrupt.
0x0000007fb7c02e90 in nanosleep () from target:/system/lib64/libc.so