タグ付けされた質問 「strace」

straceは、Linuxでシステムコールとシグナルをトレースするためのデバッグユーティリティです。

5
プログラムがアクセスしたファイルをリストする
time 特定のコマンドにかかるCPU時間を把握したい場合は、すばらしいコマンドです。 プログラムとその子によってアクセスされているファイルをリストできる類似のものを探しています。リアルタイムで、またはその後のレポートとして。 現在使用しているもの: #!/bin/bash strace -ff -e trace=file "$@" 2>&1 | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print' ただし、実行するコマンドにが含まれる場合は失敗しますsudo。あまりインテリジェントではありません(既存のファイルまたは権限の問題があるファイルのみを一覧表示するか、読み取りファイルと書き込みファイルにグループ化できると便利です)。またstrace遅いので、より速い選択で良いでしょう。

1
IP 0.0.0.0への接続は成功します。どうやって?どうして?
localhostのポートにサービスを提供しており、ポートが使用可能かどうかを別のプロセスにチェックインしたいと考えています。コードのバグにより、実際にはIPに接続しようとしていますが0.0.0.0:<port>、何らかの理由で成功します-straceが証明しているように: [...] connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 [...] どういう意味ですか?なぜ機能するのですか?
41 networking  tcp  strace 

1
straceをgrepにパイプする
stracetrough を実行しようとしていますがccze、パイプは期待通りに動作しません。 テストするために実行しているコマンドラインはsudo strace -p $(pgrep apache2) | grep openで、すべての行が出力され、grepは無視されます。 straceこの動作を引き起こす特別なものはありますか?

5
Linuxでライブラリをロードするために使用されるシステムコールは何ですか?
strace出力、実行可能ファイルが呼び出すことをライブラリへのパスが呼び出しですopen()。これは、動的にリンクされる実行可能ファイルで使用されるシステムコールですか?どうdlopen()?open()プログラムの実行に役割を果たすとは思いませんでした。

1
読み取り許可なしで実行可能ファイルをトレースする
Ubuntu 14.04でstrace実行可能ファイルを使用すると、驚くべき動作が見つかりましたが、これには読み取り権限がありません。これがバグなのか、それとも標準がこのあいまいな動作を義務付けているのだろうか。 最初に、バックグラウンドで通常の実行可能ファイルを起動し、それに添付したときに何が起こるかを見てみましょう。予想どおり、これは機能します。 $ /bin/sleep 100 & [2] 8078 $ strace -p 8078 Process 8078 attached restart_syscall(<... resuming interrupted call ...> 次に、読み取り権限のない実行可能ファイルを試します。 ---x--x--x 1 root root 26280 Sep 3 09:37 sleep* この実行中のプロセスへの接続は許可されていません。 $ ./sleep 100 & [1] 8089 $ strace -p 8089 strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted これも私が期待することです。デバッガーをプロセスにアタッチし、その方法で実行可能ファイルの読み取りアクセス許可を効果的に設定できる場合、読み取りアクセス許可なしで実行アクセス許可を付与してもあまり効果はありません。 …

1
「test」という名前の実行可能ファイルは$ PATHにありますが、実行されません
$ HOME / binにファイルがあります(尋ねる前に、はい、私のtestパスにあります)。ファイルへのフルパスで実行すると問題なく実行できることを確認しました。ただし、この方法で実行しないと、本当に奇妙な問題が発生します。testターミナルで実行すると、何もせずにすぐに戻ります。これは、いくつかの理由でファイルを見つけることの問題ではないことを知っています。 エラーメッセージはありません。通常、ファイルが見つからない、または実行できない場合、その旨を示すメッセージが出力されます。 実行してwhich testも、正しいファイルパスが返されます。 おそらく最も奇妙なのは、スクリプトが実行されstraceたときに正常に動作することです。私はstrace何が起こっているのかを理解できるかどうかを試してみましたが、で実行するとstrace、問題なく0で動作しました。

4
コマンドのネットワークアクティビティをトレースする方法
コマンドのネットワークアクティビティをトレースしたいのですが、成功せずにtcpdumpとstraceを試しました。 たとえば、パッケージをインストールしている場合、または特定のサイトに到達しようとするコマンドを使用している場合、そのネットワークアクティビティ(到達しようとしているサイト)を表示したいです。 tcpdumpを使用してこれを行うことができると思います。試しましたが、システムのすべてのネットワークアクティビティを追跡しています。複数のネットワーク関連コマンドを実行していて、特定のコマンドネットワークアクティビティのみを追跡したい場合、正確な解決策を見つけるのは困難です。 それを行う方法はありますか? 更新: ネットワークインターフェースで行われるすべてを追跡したくありません。コマンド(#yum install -y vimなど)のネットワークアクティビティを追跡したいだけです。到達しようとするサイトなど。


1
Bashは2つのシェルプロンプトを書き込もうとしますか?
教育目的で、ターミナルに接続された実行中のbashプロセスのstrace出力を調べています。 私のbashプロセスにはPID 2883があります。 私はタイプする [OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace ターミナルへ。次に、bashプロセスに進み、次の対話を行います。 [OP@localhost ~]$ ls 出力を見ると、 strace: Process 2883 attached read(0, "l", 1) = 1 write(2, "l", 1) = 1 read(0, "s", 1) = 1 write(2, "s", 1) = 1 read(0, "\r", 1) = 1 write(2, "\n", 1) …
11 bash  tty  strace 

1
なぜ `strace`はこのプロセスが何かを待っていることを示さないのですか?
強大なstrace私を失望させた。これはどのようにして可能ですか? time fooこれは、foo実行に数秒かかる( "実際の")が、ユーザー空間( "user")とカーネル( "sys")の両方で無視できるCPU時間を使用することを示しています。好奇心のために、foo以下に定義されています。 そのため、CPU命令を実行するのではなく、他の何かを待つのにほとんどの時間を費やしています。通常、私はそれがどのように待っているかを見ることができますstrace-つまり、どのシステムコールが長期間ブロックしているのか。残念ながら、このアプローチは機能しませんでした。 strace -ttt -T -C -w fooは、システムコール、タイムスタンプ、およびシステムコールに費やされた(実際の)時間の概要を示しています。しかし、この特定のプロセスは、システムコールの内部で費やされる全体(実)時間はごくわずかであることを示しました。 fooですjournalctl -b -u dev-hugepages.mount。これを再現するために、毎回異なるsystemdユニットへの最後の引数を変更しなければならなかったことを除いて。つまり、調査対象の遅延は、あるsystemdユニットのログを取得しようとしたときに初めて発生しました。 編集:主な質問に答えた後、私はこの遅延を再現する問題が発生している理由にも気付きました。 このプロセスに費やされる時間は特定の問題であり、明らかにすべてのシステムで発生するわけではありません。https://github.com/systemd/systemd/issues/7963


2
特定の期間のstraceの実行
ユーザープロセスを終了せずにCtrl + Cを使用せずに、特定の期間(たとえば1分間)ユーザープロセスでstraceを実行する方法 ユーザープロセスのstrace実行を自動化するスクリプトを作成したいと思います。
9 strace 

6
straceがrmのエイリアスを無視するのはなぜですか?
コマンドのaliasセットがありrmます。aliasコマンドを実行すると、これが出力として得られるものです。 alias rm='rm -i' これで、rmコマンドを実行すると、期待どおりに正常に動作します。 rm ramesh rm: remove regular empty file `ramesh'? y 今、私はコマンドを実行するときに呼び出されるシステムコールについて学習していました。そのために、straceコマンドを実行したときに呼び出されるファイルを一覧表示するコマンドについてここから知るようになりました。コマンドは以下の通りです。 strace -ff -e trace=file rm ramesh 2>&1 コマンドは、コマンドに設定したエイリアスを無視することを除いて、完全に正常に機能しrmます。ユーザーに確認せずにファイルを削除します。 それで、straceこのようなエイリアスを無視しますか?もしそうなら、なぜそうなのですか? 編集: これが何かをする必要があるかどうかはtype -a rmわかりませんが、出力は次のようになります: rm is aliased to `rm -i' rm is /bin/rm それで/bin/rm、この場合、削除する前にユーザーにプロンプ​​トが表示されないのはなぜですか?
8 alias  strace 

2
プロセスが実行している命令を判別する方法は?
私はstraceとltraceについて知っていますが、それはそれぞれ、プロセスが実行しているシステムコールとライブラリコールを教えてくれるだけです。プロセスが実行している命令を正確に知りたいのですが。アセンブリ、または可能であればCとアセンブリの間の何らかの中間点。バイナリがデバッグシンボルでコンパイルされていないと仮定すると、可能性が高いので、最初のオプションに傾倒します。 使用例:プロセスがハングしているように見え、straceまたはltraceからの出力がありません。プロセスが「何か」を実行しているかどうかを確認します。これは停止の問題を解決することに似ていると思うので、これを判断するのは難しいかもしれないと思います。ただし、有用なデータを収集できる可能性があります。 2番目の使用例:好奇心。アセンブリ命令のリスト全体をテキストリストにダンプすると興味深いでしょう。 私の推測では、gdbを使用してこれを行うことができますが、これは私が作成したプログラムのデバッグについてではなく、gdbを使用して実行中のプロセスの状態をチェックするためです。 OSはCentOS 6です。

4
straceを実行するとOpenGLの問題がどのように修正されますか?
私のディストリビューション(PLD Linux)への最近の大きなアップグレード以来、私はたくさんのプログラムで問題を抱えています。言うまでもなく、OpenGLまたはPulseAudioのsegfaultに関係するすべてのもの。独自のnvidiaドライバーと3.2.xカーネルを使用しています。Xorg自体は問題なく動作し、ほとんどのプログラムを実行できますが、mplayer segfaultのようなもので、どのプログラムからも音が出ません。 それがOpenGLに関連している可能性があることがわかったら、私glxgearsはテストとして遊んだ。単独で実行すると、すぐにセグメンテーション違反が発生します。その後、私はそれstraceをうまく実行できることを発見しました。同じことがにも当てはまりますmplayer。テストmp3ファイルでそれを実行すると、即座にsegfaultが実行され、実行strace mplayerすると問題なく再生されます(ただし、パルスオーディオはまだ停止し、ダミーの出力デバイスに戻ります)。 何かを実行straceすると、segfaultingを防ぐことができ、状況をデバッグし続けるにはどうすればよいですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.