如何追踪突然出現程序未終止的原因,而使用strace
它會終止?
我有一個程序突然開始不終止(我沒有更新程序,但是我的系統和核心,我不記得是什麼導致了這種影響。重新編譯程序並沒有改變非終止行為)。但是,在 下
strace
,它確實終止。這樣的事情怎麼能查到呢?
具體例子:
這是我遇到這個(對我來說)奇怪的事情的具體例子:
它是關於WWWOFFLE,SVN 修訂版2250(在調查/撰寫時最新),根據AUR-package在 Arch/Artix Linux 上編譯。
一段時間以來(沒有更新 WWWOFFLE,但更新了系統和核心,並且在出現此問題後重新編譯 WWWOFFLE 沒有明顯變化)將 wwwoffle 置於線上或離線模式經常無限期地掛起。如果我想用 追踪它
strace
,它不會掛起。如果我將它包裝在一個 shell 腳本中,它會掛起strace
,但不會掛起strace -f
/strace -ff
。細節:
- 啟動
wwwoffled
伺服器:wwwoffled -c /etc/wwwoffle/wwwoffle.conf -f -d 6
- 將 WWWOFFLE 置於線上模式(從離線模式切換到線上模式通常會成功):
wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
終端輸出:
WWWOFFLE Now Online
並返回呼叫shell。 3. 將 WWWOFFLE 置於離線模式:
wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
終端輸出:
WWWOFFLE Now Offline
並且沒有終止。
根據數字 1的日誌
wwwoffled
正確地說Important: WWWOFFLE Offline
。中止wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
並<STRG>+<c>
再次嘗試現在可以正確列印出來WWWOFFLE Already Offline
,但也不會終止。 4. 當 WWWOFFLE 已經線上時切換到線上模式也不會終止:wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
而 WWWOFFLE 已經線上確實可以正確列印出來
WWWOFFLE Already Online
但不會終止。 5.
strace
:strace wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
和
strace wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
確實似乎總是在
wwwoffled
像 1 中那樣啟動時終止。 6. 如果我將wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
andwwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
放入 bash 腳本中:#!/bin/bash wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
並執行它,然後它
strace
也不會終止:strace ./wwwoffle-off.sh
列印為最後一行
[...] access("/usr/bin/wwwoffle", R_OK) = 0 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f36a75e1e50) = 6426 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigaction(SIGINT, {sa_handler=0x5573f5295be0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f36a76898b0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f36a76898b0}, 8) = 0 wait4(-1, WWWOFFLE Already Offline
並永遠在那裡等待。(注意
WWWOFFLE Already Offline
是 的輸出wwwoffle
並寫入stdout
,最後輸出 的strace
,寫入stderr
,是wait4(-1,
) 7. 使用strace -f
orstrace -ff
(它也跟踪分叉的子執行緒),它再次終止。我只在 WWWOFFLE 中看到它,但它可能不是 WWWOFFLE 問題。我不知道如何追踪它。如何追踪這些事情,什麼可能導致這種行為?
這通常是軟體內部出現某種問題的**症狀,無法給出一般性答案。
因此,它確實特定於顯示這種行為的具體軟體中的錯誤。
在 WWWOFFLE-case 中,監聽和之間的網路通信
wwwoffle
確實wwwoffled
揭示了一些資訊。