簡體   English   中英

調試 Linux 進程掛起,它運行的是哪個代碼?

[英]Debugging Linux process hangs, which code is it running?

我有一個在非常弱的 Linux 嵌入式設備上運行的進程,它無法在自身上運行 gdb / gdb 服務器。 我讓它反復從共享庫中引發 function X (還有其他一些進程同時調用它的頻率要低得多),它通常在 1 天或半天后掛在共享庫中的某個地方。 我該如何調試:

  • 萬一它在某處阻塞:它運行的最后一行代碼是哪一行?
  • 如果它陷入無限循環:它運行了哪些代碼行?

我嘗試了什么:

  • 我深入研究了共享庫,並在里面放了很多 syslog 來檢查。 但是,由於不斷調用大量 syslog,我的進程現在每 2-5 分鍾掛起一次。 我認為系統日志被 UNIX 套接字阻止?

gdb 帶有一個名為gcore的程序,它將從正在運行的進程中生成一個核心文件。

現在許多系統默認禁用核心文件(shell 中的ulimit -c將顯示 0)。 使用ULIMIT ulimit -c unlimited UNLIMITE shell命令,然后在同一Z2591C98B70119FE624898B1EE424B5E91Z(這些限制中的其他限制)(如果您從其他過程中)進行Z2591C98B70119FE624B1E 6.1198B11198B1ENES ONTH INDY LIMITS INDY LONS 18 YESENS MENT 8您的過程。它們在那里。例如, LimitCORE=在 systemd 單元文件中)。

一旦您的進程進入錯誤的 state,請在其進程 ID 上運行gcore 然后,您可以將其復制到您的工作站並將其加載到 gdb ( gdb <executable> <core-file> )。 然后,您可以在獲取核心轉儲時查看堆棧跟蹤和其他 state。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM