Je viens tout juste de passer de 10.04 à 11.04 et gdb ne me permet plus de m'attacher aux processus, mais l'erreur se produit.
Attacher au processus 10144 Impossible d'attacher au processus. Si votre uid correspond à celui du processus cible, vérifiez le paramétrage de / proc / sys / kernel / yama / ptrace_scope ou réessayez en tant qu'utilisateur root. Pour plus de détails, voir /etc/sysctl.d/10-ptrace.conf ptrace: Opération non autorisée.
Comment puis-je résoudre ce problème afin que je puisse déboguer à nouveau sans sudo?
/etc/sysctl.d/10-ptrace.conf
fichier. cela fonctionne parfaitement pour moi. :)/etc/sysctl.d
prennent effet. Pour moi, un redémarrage du système était suffisant, mais peut-être excessif - voir le commentaire de frankster ci-dessus. Après le redémarrage, la valeur de/etc/sysctl.d
est copiée dans/proc/sys/kernel/yama/ptrace_scope
. (En outre, dans mon cas, je ne pouvais pas éditer directement ptrace_scope, même avec sudo.)sysctl -p
pour appliquer les modifications de/etc/sysctl.conf
et/etc/sysctl.d/*
. Pour ce changement spécifique, dans Ubuntu 15.04 Vivid, le fichier est/etc/sysctl.d/10-ptrace.conf
Si vous préférez laisser la
/proc/sys/kernel/yama/ptrace_scope
valeur par défaut définie sur1
, vous pouvez utiliser une solution de contournementgdb
pour exécuter le programme que vous souhaitez déboguer. Vous pouvez ensuite afficher le débogueur en appuyant simplement sur^C
. Par exemple, pour déboguer le programme (ennuyeux)sleep 60
, procédez comme suit:Voici un exemple complet.
Comme il a
/bin/sleep
été compilé (sans surprise) sans informations de débogage, la trace ci-dessus contient un minimum d'informations.la source
gdb
est le parent direct du débogueur et a tous les droits de le déboguer, même avecptrace_scope==1
. Cela ne marcherait pas si vous étiez attaché , c'est-à-dire que voussleep 60& gdb -ex "attach $!"
sleep 60& gdb -ex "attach $!"
n'est pas "utiliser gdb pour exécuter le programme", et n'est donc pas une réfutation de mon travail. L'exemple de Ruslan utilise le shell pour s'exécuter en premiersleep
, puis s'exécutergdb
. Ma solution de contournement fonctionne , et c'est ce qui m'importe. Je ne sais pas et je ne m'inquiète pas vraiment de savoir si nousgdb
attachons réellement ou non son enfant. Je tiens à pouvoir déboguer l'enfant. Ma solution de contournement accomplit cela. Néanmoins, j'ai reformulé ma réponse pour plus de clarté.