GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya menggunakan GDB untuk men-debug proses yang sedang berjalan?

Anda dapat melampirkan ke proses yang sedang berjalan dengan gdb -p PID .


Ya. Gunakan attach memerintah. Lihat tautan ini untuk informasi lebih lanjut. Mengetik help attach di konsol GDB memberikan yang berikut:

(gdb) help attach

Lampirkan ke proses atau file di luar GDB. Perintah ini dilampirkan ke target lain, dengan tipe yang sama seperti "target terakhir Anda " perintah ("info files " akan menampilkan tumpukan target Anda). Perintah dapat mengambil sebagai argumen id proses, nama proses (dengan id proses opsional sebagai akhiran), atau file perangkat. Untuk id proses, Anda harus memiliki izin untuk mengirim memproses sinyal, dan harus memiliki uid efektif yang sama dengan debugger. Saat menggunakan "attach " ke proses yang ada, debugger menemukan program yang berjalan dalam proses, pertama-tama mencari di direktori kerja saat ini, atau (jika tidak ditemukan di sana) menggunakan jalur pencarian file sumber (lihat "directory "). Anda juga dapat menggunakan perintah "file " perintahuntuk menentukan program, dan memuat tabel simbolnya.

CATATAN:Anda mungkin mengalami kesulitan untuk melampirkan ke suatu proses karena peningkatan keamanan di kernel Linux - misalnya melampirkan ke anak dari satu shell dari yang lain.

Anda mungkin perlu menyetel /proc/sys/kernel/yama/ptrace_scope tergantung pada kebutuhan Anda. Banyak sistem sekarang default ke 1 atau lebih tinggi.

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.

Ya. Anda dapat melakukan:

gdb program_name program_pid

Pintasan adalah (dengan asumsi hanya satu instance yang berjalan):

gdb program_name `pidof program_name`

Linux
  1. Pastikan Sebuah Proses Selalu Berjalan?

  2. Periksa Proses Jika Sama Sedang Berjalan?

  3. Bisakah Anda Menggunakan Jangkar ^ $ Dengan Ls?

  1. Bagaimana proses mencegat stdout dan stderr dari proses lain di Linux?

  2. Bisakah saya menggunakan Homebrew di Ubuntu?

  3. Bagaimana Saya Dapat Membuat File Dump dari Proses yang Berjalan di Linux?

  1. Bisakah saya mempercayai 127.0.0.1 secara membabi buta?

  2. Bisakah saya menggunakan APT di TinyCore?

  3. Bagaimana saya bisa mendapatkan waktu jam dinding dari proses yang sedang berjalan?