有沒有辦法獲得有關爲什麼程序在某些非常小的linux上無法插入任何日誌並且沒有pstack和gdb時卡住的信息?如何在沒有pstack和gdb的情況下獲得線程堆棧信息
1
A
回答
0
我的建議是做到以下幾點:
- 能夠自己的程序
- 內檢索操作和打印堆棧跟蹤安裝一個信號處理器(比方說,對於SIGUSR1)爲您的流程它會這樣做
- 發送信號到你的程序當它卡住了 - 控制將被移動到信號處理程序(假設你沒有屏蔽掉信號)。
現在(2.)和(3.)很簡單。對於(3.)它是kill -USR1 1234
(對於ID爲1234的進程)。對於(2.),它是:
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t sigset(int sig, sighandler_t disp);
(閱讀man sigset
瞭解詳情)。
至於(1),這裏曾經是相當困難和棘手,但現在它已經基本解決:
升壓堆棧跟蹤:Code | Documentation
它會盡可能獲得儘可能多的堆棧跟蹤信息。使用的一個簡單的例子:
#include <iostream>
#include <boost/stacktrace.hpp>
// ... somewhere inside the `bar(int)` function that is called recursively:
std::cout << boost::stacktrace::stacktrace();
可能會導致下面的輸出:
0# bar(int) at /path/to/source/file.cpp:70
1# bar(int) at /path/to/source/file.cpp:70
2# bar(int) at /path/to/source/file.cpp:70
3# bar(int) at /path/to/source/file.cpp:70
4# main at /path/to/main.cpp:93
5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
6# _start
注:棧跟蹤是最近除了升壓(如2017年8月的);如果你的Boost版本不夠新,你可以考慮獨立獲取它。
相關問題
- 1. 如何在沒有獲得NPE的情況下在堆棧上彈出節點
- 2. Struts2如何在沒有線程的情況下獲得性能?
- 3. 如何在Windows上獲取線程堆棧信息?
- 4. GDB堆棧跟蹤不完整信息
- 5. 如何在沒有錯誤信息的情況下調試ctypes
- 6. 在沒有System.Collections的情況下創建堆棧類
- 7. 在沒有堆棧的情況下創建NPE
- 8. GDB在沒有調試信息的情況下不會跳過函數
- 9. 如何在沒有`disown`或gdb的情況下關閉進程的stdout和stderr?
- 10. GDB如何在沒有斷點的情況下停止執行?
- 11. 如何在沒有網絡的情況下通過GPS獲取位置信息?
- 12. 如何獲得現有.NET線程的堆棧大小
- 13. 如何在沒有catch/try/raise的情況下展開(多級返回)堆棧?
- 14. 如何在沒有%rbp寄存器的情況下重新分配堆棧幀?
- 15. 如何在沒有定義的情況下獲得Google Protobuf消息的結構
- 16. 沒有堆棧信息 - V(未知源)
- 17. 如何在沒有堆棧指針的情況下找到堆棧的當前位置?
- 18. FoxPro中如何獲得調用堆棧信息的記錄
- 19. 如何在沒有JavaScript跟蹤的情況下獲得QR碼?
- 20. 如何在沒有git-clone的情況下獲得git項目?
- 21. 如何在沒有子類的情況下獲得NavigationController功能?
- 22. 如何在沒有連接的情況下獲得FB ID
- 23. 如何在沒有\ n的情況下獲得角色?
- 24. 如何在沒有請求對象的情況下獲得PortletPreferences
- 25. 在沒有官方API的情況下獲取Estimote信標的接近信息?
- 26. 打印註冊表信息以獲取堆棧位置GDB
- 27. 如何在沒有無線模塊的情況下使Android和Arduino通信
- 28. 如何在沒有stop()方法的情況下停止線程?
- 29. hello world如何在沒有線程的情況下工作得更快
- 30. 如何在沒有API詳細信息的情況下獲取潛在客戶詳細信息?
可能的重複[獲取所有線程的堆棧跟蹤而不附加GDB](https://stackoverflow.com/questions/12394935/getting-stacktrace-of-all-threads-without-attaching-gdb) –
不是重複的,因爲當我沒有gdb或pstack時,我會特別提問。 – YotKay