2012-03-12 277 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時通常做的相同的事情。