プロセスが実行しているコマンドが何であるかを確認するには?

プロセスが実行しているコマンドが何であるかを確認するには?

私はstraceとltraceを理解していますが、これはプロセスが実行されているシステムコールとライブラリコールのみを伝えます。プロセスが実行されているコマンドが何であるかを正確に知りたいです。アセンブリまたはCとアセンブリの間の中間点(可能な場合)。バイナリがデバッグシンボルとしてコンパイルされていないと仮定するため、最初のオプションが優先される可能性が高くなります。

ユースケース:プロセスが中断されたようで、straceまたはltraceから出力がありません。プロセスが「何か」を実行していることを確認します。私はこれが停止問題を解決するのと似ていると思うので、これは正確には理解するのが難しいかもしれません。ただし、有用なデータを収集することは可能です。

2番目のユースケース:好奇心。完全なアセンブリ命令のリストをテキストリストにダンプすることは興味深いでしょう。

私の考えでは、このタスクを実行するためにgdbを使用できると思いますが、これが私が作成したプログラムをデバッグするのではなく、gdbを使用して実行されているプロセスの状態を確認する方法の詳細なので、わかりません。

オペレーティングシステムはCentOS 6です。

ベストアンサー1

gdb:コマンドを使用してこれを実行し、ni一度siに1つのコマンドを実行できます。ほとんどの「next」値に対して、コマンドはn次のコード行を実行します。n(およびそれに対応する)の場合は、sデバッグシンボルが実行可能ファイルに表示されるようにコンパイルする必要があります。

このstackoverflowの答えこれを視覚的に行うためのいくつかの方法があります。

Command gdb:display/i $pc実行前の指示を表示します。display $pc前のコード行を表示nまたはs実行します。

おすすめ記事