2012-03-12 183 views
17

我正在使用gdb调试程序。首先我load我的可执行文件,然后我continue运行程序。我有时想中断执行我的程序,所以我做Ctrl + Cgdb:退出程序而不退出gdb

我的问题是,这一关我的程序和gdb。我如何退出我的程序而不退出gdb?

+4

这不应该发生; Ctrl-C只是应该**中断**(不终止)你的程序,它绝对不应该终止gdb。你在使用什么环境? – trojanfoe 2012-03-12 14:37:12

+1

我正在使用Cygwin。奇怪的。 – Randomblue 2012-03-12 14:39:54

回答

4

看起来像在Windows下,你必须使用Ctrl-BreakCtrl-C。看到这个page

摘录:

调用SetConsoleMode关掉`按Ctrl-C”键击的特殊 意义不能通过键入C-C中断MS-Windows程序。 出于这个原因,GDB上MS-Windows支持C-作为 替代中断键序列,其可被用于中断 调试即使它忽略C-C。

+1

谢谢。这仍然退出GDB。现在,当它退出它写道“退出(核心倾销)” – Randomblue 2012-03-12 14:54:48

+0

@Randomblue哦blimey - 似乎并不很高兴。我不知道该怎么建议,除了切换到微软的编译器(他们可以免费使用Windows SDK)。 – trojanfoe 2012-03-12 14:55:57

+0

@Randomblue你是从'cmd'还是'sh'控制台运行?被调试的程序Cygwin或Win32本机? (用于记录:是'gdb' Cygwin或Win32?;)) – 2015-08-06 22:18:27

2

首先运行程序(不是从gdb里面),然后找到它的pid。

在另一个shell,运行gdb --pid=<your program's pid>。这将gdb附加到正在运行的程序。它停止程序的执行,因此问题c继续。

现在退出你的程序,你的gdb会话将停留在那里。

+0

我的程序正在远程主机上运行。 (一个ARM芯片。) – Randomblue 2012-03-12 14:40:32

17

您是否尝试过使用kill从GDB里?

+0

是的。但在'continue'之后,我没有运行到gdb命令提示符,因此没有任何反应。 – Randomblue 2012-03-12 14:41:47

+0

@trojanfoe如何表示,Ctrl-C应该只是中断你的程序,这样你就可以再次使用gdb控制台。但是,尝试使用'start'启动你的程序。执行应该在main函数的开始处停止。然后用'kill'杀死你的程序。 – Saphrosit 2012-03-12 14:46:23

+0

当我尝试'开始'我得到“没有符号表加载。使用”文件“命令。” – Randomblue 2012-03-12 14:53:08

12

使用Ctrl-C中断应用程序。然后在GDB提示符下运行“signal SIGINT”,它将把这个信号发送给你的应用程序,使它执行与你在命令行执行ctrl-c时通常做的相同的事情。