perintah attach
Menghubungkan GDB ke proses yang sedang berjalan
Sintaks
attach [PID]
Parameter
- PID
- Menentukan pengenal proses dari proses yang akan dihubungkan.
Catatan
Untuk melanjutkan proses setelah Anda menghubungkannya, gunakan perintah continue. Jika Anda menggunakan perintah run sebagai gantinya, proses akan dimulai ulang.
Pembatasan
Saat Anda menghubungkan ke proses dengan GDB, pembatasan berikut diterapkan:
- Untuk menghubungkan ke proses dari terminal Linux yang berbeda, Anda harus menjalankan sebagai root.
- Untuk menghubungkan ke proses di mesin Windows, Anda perlu menjalankan GDB sebagai Administrator.
- Anda tidak dapat menghubungkan dua instance GDB ke proses yang sama.
- Anda tidak dapat menghubungkan GDB ke proses Windows yang sudah sedang di-debug oleh debugger Visual Studio native.
Contoh
Dalam contoh berikut, kita menghubungkan GDB ke proses Linux yang sedang berjalan, melihat tumpukan panggilan dan melanjutkan eksekusi:
(gdb) attach 13769 Menghubungkan ke proses 13769 Membaca simbol dari /home/testuser/0.elf...selesai. Membaca simbol dari /lib/i386-linux-gnu/libc.so.6... Membaca simbol dari /usr/lib/debug/lib/i386-linux-gnu/libc-2.15.so...selesai. selesai. Memuat simbol untuk /lib/i386-linux-gnu/libc.so.6 Membaca simbol dari /lib/ld-linux.so.2... Membaca simbol dari /usr/lib/debug/lib/i386-linux-gnu/ld-2.15.so...selesai. selesai. Memuat simbol untuk /lib/ld-linux.so.2 0xb771b424 in __kernel_vsyscall () (gdb) bt #0 0xb771b424 in __kernel_vsyscall () #1 0xb76393c3 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:82 #2 0xb75cd22b in _IO_new_file_underflow (fp=0xb7701ac0) at fileops.c:619 #3 0xb75ce449 in _IO_default_uflow (fp=0xb7701ac0) at genops.c:440 #4 0xb75ce260 in __GI___uflow (fp=0xb7701ac0) at genops.c:394 #5 0xb75ae565 in _IO_vfscanf_internal (s=0xb7701ac0, format=0x804856f "%d", argptr=0xbf8778a4 "errp=0x0) at vfscanf.c:620 #6 0xb75b0627 in __scanf (format=0x804856f "%d") at scanf.c:35 #7 0x08048475 in main (argc=1, argv=0xbf877964) at 0.cpp:7 (gdb) continue Melanjutkan. [Inferior 1 (proses 13769) keluar dengan normal] (gdb)
Kesalahan umum
Dalam contoh ini kita mencoba menghubungkan ke proses Linux yang berjalan di terminal yang berbeda. Ini gagal karena kita tidak menjalankan sebagai root:
(gdb) attach 13618 Menghubungkan ke program: /home/testuser/0.elf, proses 13618 Tidak dapat menghubungkan ke proses. Jika uid Anda cocok dengan uid dari target proses, periksa pengaturan /proc/sys/kernel/yama/ptrace_scope, atau coba lagi sebagai pengguna root. Untuk lebih jelasnya, lihat /etc/sysctl.d/10-ptrace.conf ptrace: Operasi tidak diizinkan. (gdb)