Ich habe vor kurzem ein Upgrade von 10.04 auf 11.04 durchgeführt und GDB erlaubt mir nicht mehr, Prozesse anzuhängen. Ich bekomme den Fehler nicht mehr
An Prozess anhängen 10144 An Prozess konnte keine Verbindung hergestellt werden. Wenn Ihre UID mit der UID des Zielprozesses übereinstimmt, überprüfen Sie die Einstellung von / proc / sys / kernel / yama / ptrace_scope, oder versuchen Sie es als Root-Benutzer erneut. Weitere Informationen finden Sie unter /etc/sysctl.d/10-ptrace.conf ptrace: Operation nicht zulässig.
Wie behebe ich das, damit ich ohne sudo wieder debuggen kann?
/etc/sysctl.d/10-ptrace.conf
Datei. es funktioniert perfekt für mich. :)/etc/sysctl.d
wirksam werden. Für mich war ein Neustart des Systems ausreichend, aber möglicherweise übertrieben - siehe Franksters Kommentar oben. Nach dem Neustart wird der Wert von/etc/sysctl.d
in kopiert/proc/sys/kernel/yama/ptrace_scope
. (In meinem Fall konnte ich ptrace_scope auch mit sudo nicht direkt bearbeiten.)sysctl -p
Änderungen von/etc/sysctl.conf
und übernehmen/etc/sysctl.d/*
. Für diese spezielle Änderung in Ubuntu 15.04 Vivid ist die Datei/etc/sysctl.d/10-ptrace.conf
Wenn Sie
/proc/sys/kernel/yama/ptrace_scope
den Standardwert von1
beibehaltengdb
möchten, können Sie das zu debuggende Programm möglicherweise mit ausführen. Sie können den Debugger dann einfach durch Drücken von aufrufen^C
. Gehen Sie beispielsweise folgendermaßen vor, um das (langweilige) Programm zu debuggensleep 60
:Hier ist ein vollständiges Beispiel.
Da
/bin/sleep
(nicht überraschend) kompiliert wurde, ohne Informationen zu debuggen, enthält der obige Backtrace nur minimale Informationen.quelle
gdb
direktes Elternteil des Debuggers ist und jedes Recht hat, es auch mit zu debuggenptrace_scope==1
. Es würde nicht funktionieren, wenn Sie stattdessen angefügt , dh etwas wiesleep 60& gdb -ex "attach $!"
sleep 60& gdb -ex "attach $!"
lautet nicht "Verwenden von gdb zum Ausführen des Programms" und ist daher keine Widerlegung meiner Abhilfemaßnahme. In Ruslans Beispiel wird die Shell verwendet, um zuerstsleep
und dann auszuführengdb
. Meine Problemumgehung funktioniert , was mir wichtig ist. Ich weiß nicht, und es interessiert mich auch nicht wirklich, ob ich michgdb
tatsächlich an sein Kind binde oder nicht . Es ist mir wichtig, das Kind zu debuggen. Meine Problemumgehung erreicht das. Trotzdem habe ich meine Antwort aus Gründen der Klarheit umformuliert.