lsはstraceで異なる動作をします。

lsはstraceで異なる動作をします。

この状況をデバッグする方法がわかりません。

1) 以下を実行しようとします。

ls /home/user

2) lsは何もブロックし、印刷しません。これは/home/userにsshfsマウントディレクトリである/home/user/sshfs_filesが含まれていますが、私のコンピュータでネットワークがダウンしているためと思います(ネットワークは再接続されましたが、SSHは切断されているようです)。

3) sshfs マウントディレクトリを停止原因として特定したかったので、straceで同じコマンドを試しました。

strace -o /tmp/log ls /home/user

4)lsは動作します!したがって、現在の状況は、lsがstraceで動作しますが、それ自体がブロックされていることです。

これがどのように可能ですか?この状況をどのように説明するのですか? lsがstraceでブロックされていない場合、どこでブロックされているかどうかはどうすればわかりますか?

ありがとうございます!

答え1

〜のようにjw13ほぼ」と指摘した。lsは小さなディレクトリで長い時間がかかります- 少なくとも説明に関する限り。そこにあるコメントを必ず読んでください!

簡単に言えば、lsいくつかの一般的なコマンドラインプログラムは、出力が端末に直接送信されないときに異なる動作をします。これは、色付けのために各ディレクトリエントリの種類を検出しようとするエイリアスlsです。ls --color=autoこの時点では動作が中断され、statsshfsインストールディレクトリで操作を実行できません。

に追加する上記の質問に対するMadScientistの回答strace: 'アクションをデバッグする方法やgdb役に立つかどうか疑問に思う場合は、ls次のような実行をお勧めします。

 strace -o /tmp/log ls --color=always /home/user

答え2

まあ、これはデバッグ中のプログラムの一般的な動作であり、実際には避けられません。変数の初期化が変更され、より多くの情報が利用可能になり、プログラムフローが変更されます。

lsのソースコードを取得し、別のデバッガを介して実行し、エラーが表示されることを望むか、別の方法で答え、解決策を見つけます。

関連情報