我已經加載了一個C++程序進程的GDB會話。我想通過不同的界面將它傳輸到同一臺機器上的另一個GDB會話,以便於調試。是否可以分離進程而不繼續運行,以便我可以將其附加到其他GDB會話中?是否可以在GDB會話之間傳輸程序的控制權?
回答
是否有可能在不繼續運行的情況下分離進程,因此我可以將其附加到另一個GDB會話中,如此 ?
我喜歡你的問題,但讓我建議一個替代方法,我覺得易於使用。
只要附加調試器,一個簡單的函數(如下)就可以容納任何線程。此外,您可以使用-D選項設置parkFlag進行製作和條件編譯,並根據自己的喜好默認設置。
bool parkFlag = true;
void park()
{
while(parkFlag) // pause thread for some time
std::this_thread::sleep_for (std::chrono::milliseconds(100));
}
因此,爲了您'更方便'的調試會話,在main之後調用park。
現在啓動'更方便'的調試器,附加,設置一些斷點,然後清除parkFlag。
如果OP可以重建他的程序,他可以很容易地開始用「正確的」GDB調試它。問題可能是已經運行的過程的狀態對於保存很重要。 –
@EmployedRussian同意。我的想象力讓我失望。我沒有問這是否是他的「真正」問題。我認爲他從'不太方便的gdb'開始是有原因的。它確實暗示了他的真正問題可能更多'我如何在'更方便'的gdb中做同樣的事情。我認爲ddd可以做任何gdb可以?通常,我在emacs中運行gdb,並且偶爾需要處理以下內容:任務輸出用於gnome-terminal(或終結器),不適用於emacs輸入/輸出重定向。 –
調試下的程序會產生GDB會話,並且沒有main()循環,因爲調試的程序是主進程的一個分支,因此我必須將其添加到那裏。我試過這個,它應該原則上工作,只是很難指定在哪些條件下運行循環。我寧願修改現有的程序儘可能少。 – dromodel
是否有可能在不繼續運行的情況下分離進程,以便我可以將其附加到另一個GDB會話中?
你可以做(gdb) signal SIGSTOP
停止當前進程,但GDB會自動恢復進程detach
命令。
可能工作的不是detach
這個過程,而是用kill -9
殺死GDB本身。即使如此,當內核不再是ptrace
d時,內核可能會決定恢復進程。
所以你不認爲這是可能的? – dromodel
我認爲它*可能會與'kill -9 $ gdb'一起使用,但我不會打賭。 –
的GDB會話由程序下調試
催生了我不知道有足夠的瞭解你的程序是如何滋生的GDB會話。 但是您可能會嘗試在測試運行之前創建一個別名(第6行)。
1 [email protected]:~$ which gdb
2 /usr/local/bin/gdb
3 [email protected]:~$ which ddd
4 /usr/bin/ddd
5 [email protected]:~$
6 [email protected]:~$ alias gdb='ddd'
7 [email protected]:~$
8 [email protected]:~$ which gdb
9 /usr/local/bin/gdb
10 [email protected]:~$ which ddd
11 /usr/bin/ddd
12 [email protected]:~$
13 [email protected]:~$ gdb
14 [email protected]:~$ ---command to start your program---
在我的ubuntu系統上,第13行調用別名。
從我的嵌入式系統的背景下,我們可以通過可執行的二進制文件的grep,我們發現任何字符串(如「廣發行」),我們可以十六進制編輯別的東西(也許「DDD」)。
不推薦它,因爲有更合適的'補丁'方法...但你只是想出'可以別名'重定向'產卵'的想法。
也許這個想法是'你如何修補現有的可執行文件?' (即不重建它)
- 1. 是否可以在應用程序之間傳輸Heroku插件?
- 2. 會話之間是否可以存在HTML5數據庫?
- 3. 可可應用程序在控制器之間傳遞對象
- 4. NodeJS應用程序之間是否存在會話?
- 5. 將javamail會話傳輸打開是否可以接受?
- 6. 控制器之間通過會話
- 7. 是否可以在不首先退出的情況下在GDB會話中調試另一個程序?
- 8. 是否可以在Visual Studio中限制程序集之間的依賴關係?
- 9. 是否可以在Symfony 2中的不同域之間共享會話?
- 10. 在ASP.NET應用程序之間傳遞會話數據
- 11. 是否可以在上次會話中輸出我輸入到控制檯的所有代碼?
- 12. 是否有可能在ASP.NET MVC中的控制器之間傳遞類?
- 13. 是否可以在tomcat中進行會話複製,而不會使會話屬性可序列化?
- 14. 窗口和模態對話框之間的會話傳輸
- 15. 是否可以在IE和word插件之間共享ASP.NET會話cookie
- 16. 是否可以在asp classic和asp.net之間共享會話狀態
- 17. 傳統應用程序和Symfony2之間的橋會話數據
- 18. Rails:是否可以在rails控制器中使用會話變量?
- 19. 在Flurry會話期間是否可以切換用戶ID?
- 20. 是否可以在會話中進行會話?
- 21. 是否可以通過Android應用程序錄制電話?
- 22. 處理程序是否可以在程序(MySql)之外聲明?
- 23. gdb是否可以附加殭屍程序(<defunct>)?
- 24. 應用程序是否可以影響TCP重新傳輸
- 25. 是否可以將cookies從VB.net程序傳輸到Mozilla Firefox?
- 26. 是否可以控制不可控制的輸入文本? - 陣營
- 27. 我們可以在iPhone應用程序之間傳輸多大的數據
- 28. wp7 - 是否可以在頁面之間加載用戶控件?
- 29. 是否可以製作應用程序
- 30. 是否可以在兩個JQuery插件之間傳遞數據?
您能否輕鬆解釋爲什麼您不簡單地使用'更易於使用的gdb?開始會話? –
要獲得此GDB會話,是否使用了attach?(請參閱調試正在運行的進程。) –
GDB會話由調試下的程序產生。 – dromodel