我試圖調試我用gdb編寫的服務器,因爲它在非常特殊和罕見的條件下發生了段錯誤。 (通過安靜模式或批處理模式?),跟隨孩子(因爲我的服務器是一個守護進程並從主PID分離),並自動轉儲核心和回溯(到一個指定的文件)一旦程序崩潰?如何在後臺對守護進程運行gdb?
回答
爲什麼不只是運行過程交互在持久屏幕會話?調試時爲什麼它必須是守護進程?或者在屏幕會話中運行gdb,並在分支後將其附加到正在運行的進程(例如gdb/path/to/binary -p PID_of_binary)。
這實際上是一個好主意,不知道爲什麼我沒有想到這一點:P感謝基礎解決方案! – 2010-01-13 03:09:37
+1用於tmux而不是屏幕 – lkraav 2011-01-13 16:24:35
我不是一個真正的gdb的專家,但兩件事情浮現在腦海
- Tracepoints作爲程序運行它可能給你必要的信息或
- 使用gdb的remote debugging facility調試程序,而它的運行作爲守護進程。
How to generate a stacktrace when my gcc C++ app crashes這個問題的答案應該做你想做的。 (假設你可以對你的代碼進行修改)
首先,我會設置你的shell /環境給你一個核心轉儲。在bash:
ulimit -c unlimited
一旦你擁有了核心轉儲,您可以使用gdb來檢查堆棧跟蹤:
gdb /path/to/app /path/to/core/file
請注意,擁有核心文件與在調試器下停止相同的進程不是一回事。核心文件不保留有關打開文件描述符或內存映射狀態的信息。所以這並不總是一個有用的建議。 – 2010-01-12 19:22:11
你不能調用程序中定義的函數。 – 2010-01-12 19:36:10
假設你有適當的權限,你可以讓gdb連接到任何進程。與附加命令的gdb內
gdb /path/to/binary _pid_
或:你可以做它的命令行
attach _pid_
所以,一旦你的後臺程序已經啓動,您可以使用這些技術來連接到守護進程運行的最終PID。連接gdb會停止正在跟蹤的進程,因此您需要發出「繼續」來重新啓動它。
我不知道直接的方式讓gdb在程序崩潰時運行任意命令。以下是我能想到的一種解決方法:
- 創建並註冊SIGSEGV的信號處理程序。
- 告訴gdb不要停在該信號上(
handle SIGSEGV nostop
) - 在信號處理程序的第一行設置一個斷點。
- 分配commands to the breakpoint從第3步
你可能想看看桑巴如何促進調試;它有一個可配置的"panic action",可以掛起應用程序,通知開發者,產卵gdb等,並作爲其信號處理程序的一部分運行。請參閱Samba源樹中的lib/util/fault.c。
- 1. 如何在後臺運行play framework 2.5(作爲守護進程)?
- 2. Sendmail在後臺運行一個smtp服務器(守護進程)?
- 3. Python的守護進程不會在Ubuntu後臺運行
- 4. 使用gdb調試正在運行的守護進程
- 5. 如何運行docker守護進程?
- 6. python守護進程線程退出但進程仍在後臺運行
- 7. Python:在Windows7中運行守護進程
- 8. 在C中的後臺進程(守護進程)不execvp()-ing
- 9. Docker - 如何將mongodb進程作爲守護進程運行
- 10. 通過rsh運行守護進程
- 11. 運行web.py作爲守護進程
- 12. 將SBT作爲守護進程運行
- 13. 可以在前臺運行`mongod`,但不能作爲守護進程運行
- 14. Python多線程:如何讓守護進程線程運行
- 15. 如何在後臺作爲守護程序運行的Symfony2命令
- 16. 如何查看gradle守護進程是否正在運行?
- 17. 如何檢查Hadoop守護進程是否正在運行?
- 18. 如何在守護進程模式下運行Warp?
- 19. 如何在Windows上運行Apache Ignite作爲守護進程
- 20. 如何確保只有一個守護進程正在運行?
- 21. 守護進程,使程序在python/wx.python的後臺工作
- 22. 如何在後臺運行進程? c#
- 23. 在後臺運行進程
- 24. 守護進程軟件在後臺更新mysql數據庫
- 25. Fedora如何自動運行ssh守護進程
- 26. 如何從NSApplication運行launchd agent /守護進程?
- 27. 如何捕獲從init.d運行的Linux守護進程的pid
- 28. 如何將sbt作爲守護進程運行?
- 29. 我如何確保獅身人面像守護進程運行?
- 30. 守護進程模式下的chef-client如何運行
http:// stackoverflow。com/questions/17965/generate-a-core-dump-in-linux關於生成核心轉儲的SO帖子 – 2010-01-12 17:14:07
@HassanSyed:http://vmlinux.org/jocke/mirror/www.objsw.com/docs/gdb_22.html是一個死鏈接。 – bgoodr 2015-12-19 20:21:15