运维开发网

在Linux中为什么gdb需要root权限来调试用户程序?

运维开发网 https://www.qedev.com 2020-05-29 10:31 出处:网络
我已经成功使用gdb了一段时间,但我最近升级了我的Ubuntu版本,现在看来如果我以root身份运行,我只能获得gdb才能成功运行我的程序.那是,
我已经成功使用gdb了一段时间,但我最近升级了我的Ubuntu版本,现在看来如果我以root身份运行,我只能获得gdb才能成功运行我的程序.那是,

~ %  gdb -q sleep -ex 'run 60'
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
tcsh: Permission denied.
During startup program exited with code 1.
(gdb)

失败,而

~ %  sudo gdb -q sleep -ex 'run 60'
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
Running .tcshrc
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7adada0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82
82  ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb)

作品.一个线索是,在第一种情况下,gdb启动不运行我的.tcshrc文件,而在第二种情况下它运行.

这似乎是一个简单的权限问题,我必须一次修复,因为在过去,我从来不需要以root身份运行gdb.然而,经过大量的谷歌搜索,我无法找到我可能做过的事情(如果我确实做了一些事情).一个可能的解决方案 – 设置ptrace permissions – 似乎不起作用.

有没有什么需要做的,以允许gdb运行没有root权限的程序?我知道在OSX中,gdb必须经过编码. Ubuntu / Linux有类似的东西吗?

这里有一些调试gdb问题的想法.评论对于这样的事情并不可行,所以我把它们放到了答案中.

尝试-n选项以确保没有加载init文件.

使用echo程序而不是sleep 60来使调试更简单(示例中的SIGINT事物可能特定于睡眠程序.

运行gdb -batch并将其余部分放入〜/ .gdbinit:

file /bin/echo
run

添加set verbose.

完成后不要忘记清理〜/ .gdbinit.

0

精彩评论

暂无评论...
验证码 换一张
取 消