Strace
strace/ptrace 會導致程序崩潰嗎?
所以最近,我正在和某人討論 strace,他們問如果你對正在執行的程序進行 strace 會發生什麼,就像它正在創建網路套接字或類似的東西一樣。這會導致程序以意想不到的方式崩潰嗎?
從我讀到的關於 ptrace(strace 使用的系統呼叫)的內容來看,如果您只是在調試一個執行緒,它應該不會導致類似的事情。每次呼叫系統呼叫時,該過程都會停止,但它應該稍後恢復並且不明智。信號在未執行時會排隊,所以我假設系統呼叫/套接字/偵聽會發生類似的事情。
在 strace 上下文中使用 ptrace 會導致任何奇怪的程序崩潰嗎?
不,
strace
不應該導致程序崩潰——除了在這個有點不尋常的情況下:
如果它有一個取決於執行時間或執行時記憶體位置的錯誤。
它可能會觸發這種“ heisenbug ”——但非常罕見,因為這種bug很少見,只需要在strace或其他instrumentation下觸發。當你找到一隻黑森蟲時,這通常是一件好事。
關於
ptrace()
- 系統呼叫 - 這正是strace
我認為的內部,所以它是相似的。一個人可以做的比直接strace
使用更多ptrace()
。您的範例就是這種錯誤:
在範例中,
strace
將更改創建網路連接的步驟的時間。如果這導致了問題,那就是“等待發生的問題”——執行時間不斷變化。與strace
,只是多一點。但是任何其他應用程序都可以更多地改變時間,比如啟動一個程序。