我使用 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)
Run Code Online (Sandbox Code Playgroud)
失败,而
~ % 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)
Run Code Online (Sandbox Code Playgroud)
作品。一个线索是,在第一种情况下,gdb 启动不运行我的 .tcshrc 文件,而在第二种情况下它运行。
这似乎是一个简单的权限问题,我必须曾经修复过,因为在过去,我从不需要以 root 身份运行 gdb。然而,经过多次谷歌搜索后,我无法找到我可能会做的事情(如果我确实做了某事)。一种可能的修复 - 设置ptrace 权限- 似乎不起作用。
是否需要做一些事情来允许 gdb 在没有 root 权限的情况下运行程序?我知道在 OSX 中,必须对 gdb 进行代码设计。Ubuntu/Linux 有类似的东西吗?
我将登录 shell 更改为 bash,并且 gdb 不再需要 root 权限来调试。这是最新的:
我的.gdbinit文件:
(bash) ~ % 更多 .gdbinit 展示环境SHELL 文件/bin/echo 运行“运行.gdbinit” (重击)~%
以及运行结果gdb:
(bash) ~ % gdb -q -batch 外壳=/bin/bash 运行.gdbinit 【下级1(进程3174)正常退出】 (重击)~%
不过,我仍然不明白为什么 tcsh 不起作用,并且很想知道。因此,如果有人有可能的解释,请发表评论。