Saya baru saja memutakhirkan dari 10,04 ke 11,04 dan gdb tidak memungkinkan saya untuk melampirkan ke proses lagi saya mendapatkan kesalahan
Melampirkan ke proses 10144 Tidak dapat melampirkan ke proses. Jika uid Anda cocok dengan uid dari proses target, periksa pengaturan / proc / sys / kernel / yama / ptrace_scope, atau coba lagi sebagai pengguna root. Untuk detail lebih lanjut, lihat /etc/sysctl.d/10-ptrace.conf ptrace: Operasi tidak diizinkan.
Bagaimana cara memperbaikinya sehingga saya dapat men-debug lagi tanpa sudo?
/etc/sysctl.d/10-ptrace.conf
file. ini bekerja dengan baik untuk saya. :)/etc/sysctl.d
menjadi efektif. Bagi saya, sistem restart sudah cukup, tetapi mungkin telah berlebihan - lihat komentar frankster di atas. Setelah restart, nilai dari/etc/sysctl.d
disalin ke/proc/sys/kernel/yama/ptrace_scope
. (Juga, dalam kasus saya, saya tidak dapat mengedit ptrace_scope secara langsung, bahkan dengan sudo.)sysctl -p
untuk menerapkan perubahan dari/etc/sysctl.conf
dan/etc/sysctl.d/*
. Untuk perubahan spesifik ini, di Ubuntu 15.04 Vivid, file tersebut adalah/etc/sysctl.d/10-ptrace.conf
Jika Anda lebih suka membiarkan
/proc/sys/kernel/yama/ptrace_scope
nilai defaultnya ditetapkan1
, maka sebagai solusi yang dapat Anda pertimbangkangdb
untuk menjalankan program yang ingin Anda debug. Anda kemudian dapat membuka debugger hanya dengan menekan^C
. Misalnya, untuk debug ke program (membosankan)sleep 60
, lakukan hal berikut:Ini adalah contoh lengkapnya.
Karena
/bin/sleep
dikompilasi tanpa informasi debug, backtrace di atas mengandung informasi minimal.sumber
gdb
adalah induk langsung dari debuggee dan memiliki hak untuk melakukan debug bahkan denganptrace_scope==1
. Ini tidak akan berhasil jika Anda malah melampirkan , yaitu melakukan sesuatu sepertisleep 60& gdb -ex "attach $!"
sleep 60& gdb -ex "attach $!"
bukanlah "menggunakan gdb untuk menjalankan program", dan karenanya bukan merupakan bantahan dari workraound saya. Contoh Ruslan adalah menggunakan shell untuk menjalankan pertamasleep
dan kemudian menjalankangdb
. Solusi saya berhasil , dan itulah yang saya pedulikan. Saya tidak tahu, saya juga tidak peduli, apakahgdb
benar-benar melekat pada anaknya. Saya peduli bisa men-debug anak itu. Solusi saya mencapai itu. Meskipun demikian, saya telah menulis ulang jawaban saya untuk kejelasan.