GNU/Linux >> Linux の 問題 >  >> Linux

GDB を使用して実行中のプロセスをデバッグできますか?

gdb -p PID で実行中のプロセスにアタッチできます .


はい。 attach を使用 指図。詳細については、このリンクを参照してください。 help attach と入力しています GDB コンソールで次のように表示されます:

(gdb) help attach

GDB 外のプロセスまたはファイルに接続します。このコマンドは、前回と同じタイプの別のターゲットに接続します"target " コマンド ("info files " はターゲット スタックを表示します。このコマンドは、引数としてプロセス ID、プロセス名 (サフィックスとしてオプションのプロセス ID を使用)、またはデバイス ファイルを受け取ることができます。プロセス ID の場合は、信号を処理し、デバッガと同じ有効な uid を持っている必要があります。 "attach を使用する場合 " 既存のプロセスに対して、デバッガーはプロセスで実行されているプログラムを見つけ、最初に現在の作業ディレクトリを検索するか、(そこに見つからない場合は) ソース ファイルの検索パスを使用します ("directory を参照してください")。 " コマンド。"file も使用できます。 " コマンドでプログラムを指定し、そのシンボル テーブルをロードします。

注:Linux カーネルのセキュリティが向上したため、プロセスへのアタッチが困難になる場合があります。たとえば、あるシェルの子を別のシェルからアタッチするなどです。

おそらく /proc/sys/kernel/yama/ptrace_scope を設定する必要があります あなたの要件に応じて。多くのシステムがデフォルトで 1 になりました 以上。

The sysctl settings (writable only with CAP_SYS_PTRACE) are:

0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other
    process running under the same uid, as long as it is dumpable (i.e.
    did not transition uids, start privileged, or have called
    prctl(PR_SET_DUMPABLE...) already). Similarly, PTRACE_TRACEME is
    unchanged.

1 - restricted ptrace: a process must have a predefined relationship
    with the inferior it wants to call PTRACE_ATTACH on. By default,
    this relationship is that of only its descendants when the above
    classic criteria is also met. To change the relationship, an
    inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare
    an allowed debugger PID to call PTRACE_ATTACH on the inferior.
    Using PTRACE_TRACEME is unchanged.

2 - admin-only attach: only processes with CAP_SYS_PTRACE may use ptrace
    with PTRACE_ATTACH, or through children calling PTRACE_TRACEME.

3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via
    PTRACE_TRACEME. Once set, this sysctl value cannot be changed.

はい。できること:

gdb program_name program_pid

ショートカットは次のようになります (1 つのインスタンスのみが実行されていると仮定):

gdb program_name `pidof program_name`

Linux
  1. プロセスが常に実行されていることを確認しますか?

  2. Linuxでプロセスが別のプロセスのstdoutとstderrを傍受するにはどうすればよいですか?

  3. Python で C コードを使用できますか?

  1. Ubuntu で Homebrew を使用できますか?

  2. 実行中のプロセスの絶対パスを知るにはどうすればよいですか?

  3. Linux で実行中のプロセスのダンプ ファイルを作成するにはどうすればよいですか?

  1. TinyCore で APT を使用できますか?

  2. 実行中のプロセスのウォールクロック時間を取得するにはどうすればよいですか?

  3. 実行中のプロセスが属するグループを特定する