Используйте sudo mysqld stop, чтобы остановить его как root.
надеюсь, что это помогло.
В Maverick Meerkat (10.10) Ubuntu представила патч, чтобы запретить ptracing не-дочерних процессов пользователями без полномочий root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d1]
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Чтобы окончательно разрешить редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Чтобы прочитать
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представила патч, чтобы запретить ptracing не-дочерних процессов пользователями без полномочий root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d1] echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Чтобы окончательно разрешить редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Чтобы прочитать
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представила патч, чтобы запретить ptracing не-дочерних процессов пользователями без полномочий root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d1] echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Чтобы окончательно разрешить редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Чтобы прочитать
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представила патч, чтобы запретить ptracing не-дочерних процессов пользователями без полномочий root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d1] echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Чтобы окончательно разрешить редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Чтобы прочитать
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представила патч, чтобы запретить ptracing не-дочерних процессов пользователями без полномочий root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d1] echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Чтобы окончательно разрешить редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Чтобы прочитать
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представила патч, чтобы запретить ptracing не-дочерних процессов пользователями без полномочий root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d1] echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Чтобы окончательно разрешить редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Чтобы прочитать
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представил патч, чтобы запретить ptracing не-дочерних процессов пользователями, не являющимися root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d5]
echo 0 | sudo tee / proc / sys / kernel / yama / ptrace_scope
Чтобы окончательно разрешить ему редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Для чтения
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представил патч, чтобы запретить ptracing не-дочерних процессов пользователями, не являющимися root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d5]
echo 0 | sudo tee / proc / sys / kernel / yama / ptrace_scope
Чтобы окончательно разрешить ему редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Для чтения
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представил патч, чтобы запретить ptracing не-дочерних процессов пользователями, не являющимися root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d5]
echo 0 | sudo tee / proc / sys / kernel / yama / ptrace_scope
Чтобы окончательно разрешить ему редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Для чтения
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
В Maverick Meerkat (10.10) Ubuntu представил патч, чтобы запретить ptracing не-дочерних процессов пользователями, не являющимися root, т.е. только процесс, который является родителем другого процесса, может использовать его для обычных пользователей, в то время как root все равно может обрабатывать каждый процесс. Следовательно, вы можете использовать gdb для присоединения через sudo.
Вы можете временно отключить это ограничение (и вернуться к старому поведению, позволяющему вашему пользователю выполнять ptrace (gdb) любой из своих других процессов): [ ! d5]
echo 0 | sudo tee / proc / sys / kernel / yama / ptrace_scope
Чтобы окончательно разрешить ему редактировать /etc/sysctl.d/10-ptrace.conf и изменить строку:
kernel.yama.ptrace_scope = 1
Для чтения
kernel.yama.ptrace_scope = 0
Для некоторого фона о том, почему это изменение было сделано, см. Ubuntu wiki
/etc/sysctl.d/10-ptrace.conf
. он отлично работает для меня. :)
– soroosh
20 April 2013 в 19:29
/etc/sysctl.d
необходим какой-либо перезапуск. Для меня перезапуск системы был достаточным, но, возможно, это было излишним - см. Комментарий франкстера выше. После перезапуска значение из /etc/sysctl.d
копируется в / proc / sys / kernel / yama / ptrace_scope
. (Кроме того, в моем случае я не мог напрямую редактировать ptrace_scope, даже с помощью sudo.)
– Andy Thomas
27 March 2015 в 01:04
sysctl -p
, чтобы применить изменения из /etc/sysctl.conf
и /etc/sysctl.d / *
. Для этого конкретного изменения в Ubuntu 15.04 Vivid файл /etc/sysctl.d/10-ptrace.conf
– Mircea Vutcovici
11 August 2015 в 17:52
Если вы предпочитаете оставить /proc/sys/kernel/yama/ptrace_scope установленным по умолчанию значением 1, то в качестве обходного пути вы можете рассмотреть возможность использования gdb для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^C. Например, чтобы отлаживать (скучную) программу sleep 60, выполните следующие действия:
$ gdb -q sleep -ex 'run 60'
Вот полный пример.
$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0 0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x0000000000403cd7 in ?? ()
#2 0x0000000000403b88 in ?? ()
#3 0x00000000004016c9 in ?? ()
#4 0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5 0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit
Поскольку /bin/sleep был (неудивительно), скомпилированный без отладки информации, вышеупомянутая обратная трассировка содержит минимальную информацию.
Если вы предпочитаете оставить /proc/sys/kernel/yama/ptrace_scope установленным по умолчанию значением 1, то в качестве обходного пути вы можете рассмотреть возможность использования gdb для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^C. Например, чтобы отлаживать (скучную) программу sleep 60, выполните следующие действия:
$ gdb -q sleep -ex 'run 60'
Вот полный пример.
$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0 0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x0000000000403cd7 in ?? ()
#2 0x0000000000403b88 in ?? ()
#3 0x00000000004016c9 in ?? ()
#4 0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5 0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit
Поскольку /bin/sleep был (неудивительно), скомпилированный без отладки информации, вышеупомянутая обратная трассировка содержит минимальную информацию.
Если вы предпочитаете оставить /proc/sys/kernel/yama/ptrace_scope установленным по умолчанию значением 1, то в качестве обходного пути вы можете рассмотреть возможность использования gdb для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^C. Например, чтобы отлаживать (скучную) программу sleep 60, выполните следующие действия:
$ gdb -q sleep -ex 'run 60'
Вот полный пример.
$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0 0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x0000000000403cd7 in ?? ()
#2 0x0000000000403b88 in ?? ()
#3 0x00000000004016c9 in ?? ()
#4 0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5 0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit
Поскольку /bin/sleep был (неудивительно), скомпилированный без отладки информации, вышеупомянутая обратная трассировка содержит минимальную информацию.
Если вы предпочитаете оставить /proc/sys/kernel/yama/ptrace_scope установленным по умолчанию значением 1, то в качестве обходного пути вы можете рассмотреть возможность использования gdb для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^C. Например, чтобы отлаживать (скучную) программу sleep 60, выполните следующие действия:
$ gdb -q sleep -ex 'run 60'
Вот полный пример.
$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0 0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x0000000000403cd7 in ?? ()
#2 0x0000000000403b88 in ?? ()
#3 0x00000000004016c9 in ?? ()
#4 0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5 0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit
Поскольку /bin/sleep был (неудивительно), скомпилированный без отладки информации, вышеупомянутая обратная трассировка содержит минимальную информацию.
Если вы предпочитаете оставить /proc/sys/kernel/yama/ptrace_scope установленным по умолчанию значением 1, то в качестве обходного пути вы можете рассмотреть возможность использования gdb для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^C. Например, чтобы отлаживать (скучную) программу sleep 60, выполните следующие действия:
$ gdb -q sleep -ex 'run 60'
Вот полный пример.
$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0 0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x0000000000403cd7 in ?? ()
#2 0x0000000000403b88 in ?? ()
#3 0x00000000004016c9 in ?? ()
#4 0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5 0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit
Поскольку /bin/sleep был (неудивительно), скомпилированный без отладки информации, вышеупомянутая обратная трассировка содержит минимальную информацию.
Если вы предпочитаете оставить /proc/sys/kernel/yama/ptrace_scope установленным по умолчанию значением 1, то в качестве обходного пути вы можете рассмотреть возможность использования gdb для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^C. Например, чтобы отлаживать (скучную) программу sleep 60, выполните следующие действия:
$ gdb -q sleep -ex 'run 60'
Вот полный пример.
$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0 0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x0000000000403cd7 in ?? ()
#2 0x0000000000403b88 in ?? ()
#3 0x00000000004016c9 in ?? ()
#4 0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5 0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit
Поскольку /bin/sleep был (неудивительно), скомпилированный без отладки информации, вышеупомянутая обратная трассировка содержит минимальную информацию.
Если вы предпочитаете оставить / proc / sys / kernel / yama / ptrace_scope
установленным по умолчанию значением 1
, то в качестве обходного пути вы можете рассмотреть возможность использования gdb
для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^ C
. Например, чтобы отладить (скучную) программу sleep 60
, выполните следующие действия:
$ gdb -q sleep -ex 'run 60' [! D5]
Вот полный пример.
$ gdb -q sleep -ex 'run 60' Чтение символов из сна ... (не найдены отладочные символы) ... сделанный. Начальная программа: / bin / sleep 60 ^ C Программный сигнал SIGINT, прерывание. 0x00007ffff7ad5d60 в __nanosleep_nocancel () на ../sysdeps/unix/syscall-template.S:81 81 ../sysdeps/unix/syscall-template.S: Нет такого файла или каталога. (gdb) backtrace # 0 0x00007ffff7ad5d60 в __nanosleep_nocancel () в ../sysdeps/unix/syscall-template.S:81 # 1 0x0000000000403cd7 in ?? () # 2 0x0000000000403b88 in ?? () # 3 0x00000000004016c9 in ?? () # 4 0x00007ffff7a35ec5 в __libc_start_main (main = 0x401540, argc = 2, argv = 0x7fffffffea08, init = & lt; optimized out & gt ;, fini = & lt; optimized out & gt ;, rtld_fini = & lt; optimized out & gt ;, stack_end = 0x7fffffffe9f8) в libc -start.c: 287 # 5 0x00000000004017d5 in ?? () (gdb) continue Продолжение. [Inferior 1 (процесс 3531) вышел из строя] (gdb) quit
Поскольку / bin / sleep
был (неудивительно) скомпилирован без отладки информации, вышеупомянутая обратная трассировка содержит минимальная информация.
Если вы предпочитаете оставить / proc / sys / kernel / yama / ptrace_scope
установленным по умолчанию значением 1
, то в качестве обходного пути вы можете рассмотреть возможность использования gdb
для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^ C
. Например, чтобы отладить (скучную) программу sleep 60
, выполните следующие действия:
$ gdb -q sleep -ex 'run 60' [! D5]
Вот полный пример.
$ gdb -q sleep -ex 'run 60' Чтение символов из сна ... (не найдены отладочные символы) ... сделанный. Начальная программа: / bin / sleep 60 ^ C Программный сигнал SIGINT, прерывание. 0x00007ffff7ad5d60 в __nanosleep_nocancel () на ../sysdeps/unix/syscall-template.S:81 81 ../sysdeps/unix/syscall-template.S: Нет такого файла или каталога. (gdb) backtrace # 0 0x00007ffff7ad5d60 в __nanosleep_nocancel () в ../sysdeps/unix/syscall-template.S:81 # 1 0x0000000000403cd7 in ?? () # 2 0x0000000000403b88 in ?? () # 3 0x00000000004016c9 in ?? () # 4 0x00007ffff7a35ec5 в __libc_start_main (main = 0x401540, argc = 2, argv = 0x7fffffffea08, init = & lt; optimized out & gt ;, fini = & lt; optimized out & gt ;, rtld_fini = & lt; optimized out & gt ;, stack_end = 0x7fffffffe9f8) в libc -start.c: 287 # 5 0x00000000004017d5 in ?? () (gdb) continue Продолжение. [Inferior 1 (процесс 3531) вышел из строя] (gdb) quit
Поскольку / bin / sleep
был (неудивительно) скомпилирован без отладки информации, вышеупомянутая обратная трассировка содержит минимальная информация.
Если вы предпочитаете оставить / proc / sys / kernel / yama / ptrace_scope
установленным по умолчанию значением 1
, то в качестве обходного пути вы можете рассмотреть возможность использования gdb
для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^ C
. Например, чтобы отладить (скучную) программу sleep 60
, выполните следующие действия:
$ gdb -q sleep -ex 'run 60' [! D5]
Вот полный пример.
$ gdb -q sleep -ex 'run 60' Чтение символов из сна ... (не найдены отладочные символы) ... сделанный. Начальная программа: / bin / sleep 60 ^ C Программный сигнал SIGINT, прерывание. 0x00007ffff7ad5d60 в __nanosleep_nocancel () на ../sysdeps/unix/syscall-template.S:81 81 ../sysdeps/unix/syscall-template.S: Нет такого файла или каталога. (gdb) backtrace # 0 0x00007ffff7ad5d60 в __nanosleep_nocancel () в ../sysdeps/unix/syscall-template.S:81 # 1 0x0000000000403cd7 in ?? () # 2 0x0000000000403b88 in ?? () # 3 0x00000000004016c9 in ?? () # 4 0x00007ffff7a35ec5 в __libc_start_main (main = 0x401540, argc = 2, argv = 0x7fffffffea08, init = & lt; optimized out & gt ;, fini = & lt; optimized out & gt ;, rtld_fini = & lt; optimized out & gt ;, stack_end = 0x7fffffffe9f8) в libc -start.c: 287 # 5 0x00000000004017d5 in ?? () (gdb) continue Продолжение. [Inferior 1 (процесс 3531) вышел из строя] (gdb) quit
Поскольку / bin / sleep
был (неудивительно) скомпилирован без отладки информации, вышеупомянутая обратная трассировка содержит минимальная информация.
Если вы предпочитаете оставить / proc / sys / kernel / yama / ptrace_scope
установленным по умолчанию значением 1
, то в качестве обходного пути вы можете рассмотреть возможность использования gdb
для запуска программы, которую вы хотите отлаживать. Затем вы можете вызвать отладчик, просто нажав ^ C
. Например, чтобы отладить (скучную) программу sleep 60
, выполните следующие действия:
$ gdb -q sleep -ex 'run 60' [! D5]
Вот полный пример.
$ gdb -q sleep -ex 'run 60' Чтение символов из сна ... (не найдены отладочные символы) ... сделанный. Начальная программа: / bin / sleep 60 ^ C Программный сигнал SIGINT, прерывание. 0x00007ffff7ad5d60 в __nanosleep_nocancel () на ../sysdeps/unix/syscall-template.S:81 81 ../sysdeps/unix/syscall-template.S: Нет такого файла или каталога. (gdb) backtrace # 0 0x00007ffff7ad5d60 в __nanosleep_nocancel () в ../sysdeps/unix/syscall-template.S:81 # 1 0x0000000000403cd7 in ?? () # 2 0x0000000000403b88 in ?? () # 3 0x00000000004016c9 in ?? () # 4 0x00007ffff7a35ec5 в __libc_start_main (main = 0x401540, argc = 2, argv = 0x7fffffffea08, init = & lt; optimized out & gt ;, fini = & lt; optimized out & gt ;, rtld_fini = & lt; optimized out & gt ;, stack_end = 0x7fffffffe9f8) в libc -start.c: 287 # 5 0x00000000004017d5 in ?? () (gdb) continue Продолжение. [Inferior 1 (процесс 3531) вышел из строя] (gdb) quit
Поскольку / bin / sleep
был (неудивительно) скомпилирован без отладки информации, вышеупомянутая обратная трассировка содержит минимальная информация.
gdb
является прямым родителем debuggee и имеет полное право отлаживать его даже с помощью ptrace_scope == 1
. Это не сработает, если вы вместо прикреплены i>, то есть сделали что-то вроде sleep 60 & amp; gdb -ex "присоединить $!"
– Ruslan
5 January 2016 в 20:27