Niedawno zaktualizowałem z 10.04 do 11.04, a gdb nie pozwoli mi już na dołączanie się do procesów. Pojawia się błąd
Dołączanie do procesu 10144 Nie można dołączyć do procesu. Jeśli identyfikator użytkownika jest zgodny z identyfikatorem procesu docelowego, sprawdź ustawienie / proc / sys / kernel / yama / ptrace_scope lub spróbuj ponownie jako użytkownik root. Aby uzyskać więcej informacji, zobacz /etc/sysctl.d/10-ptrace.conf ptrace: Operacja niedozwolona.
Jak to naprawić, aby móc ponownie debugować bez sudo?
/etc/sysctl.d/10-ptrace.conf
plik. działa dla mnie idealnie. :)/etc/sysctl.d
. Dla mnie ponowne uruchomienie systemu było wystarczające, ale mogło to być przesada - patrz komentarz frankster powyżej. Po ponownym uruchomieniu wartość z/etc/sysctl.d
jest kopiowana do/proc/sys/kernel/yama/ptrace_scope
. (Również w moim przypadku nie mogłem bezpośrednio edytować ptrace_scope, nawet z sudo.)sysctl -p
aby zastosować zmiany z/etc/sysctl.conf
i/etc/sysctl.d/*
. Dla tej konkretnej zmiany w Ubuntu 15.04 Vivid plik to/etc/sysctl.d/10-ptrace.conf
Jeśli wolisz pozostawić
/proc/sys/kernel/yama/ptrace_scope
ustawioną domyślną wartość1
, wówczas obejściem tego problemu możegdb
być uruchomienie programu, który chcesz debugować. Następnie możesz uruchomić debuger, naciskając^C
. Na przykład, aby debugować program (nudny)sleep 60
, wykonaj następujące czynności:Oto kompletny przykład.
Ponieważ
/bin/sleep
został (co nie dziwi) skompilowany bez debugowania informacji, powyższy ślad zawiera minimalne informacje.źródło
gdb
jest bezpośrednim rodzicem debugowanego i ma wszelkie prawo do debugowania go nawet przy pomocyptrace_scope==1
. To nie zadziałałoby, gdybyś zamiast tego przywiązał się , tj. Zrobił coś w stylusleep 60& gdb -ex "attach $!"
sleep 60& gdb -ex "attach $!"
nie polega na „używaniu gdb do uruchamiania programu”, a zatem nie jest obaleniem mojego obejścia. Przykładem Ruslana jest użycie powłoki do pierwszego uruchomienia,sleep
a następnie uruchomieniagdb
. Moje obejście działa , na tym mi zależy. Nie wiem ani nie obchodzi mnie, czy takgdb
naprawdę przywiązuje się do dziecka. Zależy mi na tym, aby móc debugować dziecko. Moje obejście tego dokonuje. Niemniej jednak dla jasności przeredagowałem swoją odpowiedź.