我已经使用gdb相当成功了一段时间,但我最近升级了我的Ubuntu版本,现在看来,我只能得到gdb成功运行我的程序,如果我以root身份运行。 那是,
~ % 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。 然而,经过大量的search,我无法find我可能做了什么(如果我实际上做了什么)。 一个可能的修复 – 设置ptrace权限 – 似乎没有工作。
核心文件中的地址是什么?
如何debugging需要以用户身份从gdb(Eclipse)作为root运行的程序(设置gdb suid root?)
是否有替代gdb的Linux系统?
如何模拟ARM处理器运行时环境并将Linux内核模块加载到其中?
gdb符号不加载
有没有什么需要做的,以允许gdb运行没有root权限的程序? 我知道在OSX中,gdb必须进行编码。 Ubuntu / Linux有类似的东西吗?
GDB支持Python,ImportError没有名为gdb的模块
我如何在nasm中包含debugging信息?
GDB检查内存权限
如何将地址转换为GDB中的特定typesvariables?
这里有一些关于调试gdb问题的想法。 评论对这样的事情是不可行的,所以我把它们作为答案。
尝试-n选项以确保没有加载init文件。
使用echo程序而不是sleep 60来使调试变得更简单(在你的例子中,SIGINT可能是特定于睡眠程序的。
运行gdb -batch ,把其余的放到~/.gdbinit :
file /bin/echo run
添加set verbose on 。
完成后不要忘记清理~/.gdbinit 。
这不是一个完整的答案,但事情变得更加清晰。 上面的提示非常有帮助。 我创建了以下.gdbinit文件
展示环境SHELL
文件/ bin / echo
运行“再见”
结果很有趣。 如果SHELL=/usr/tcsh ,我得到一个权限错误,即
〜%setenv SHELL / bin / tcsh
〜%gdb -q -batch
SHELL = / bin / tcsh
tcsh:权限被拒绝。
/home/calhoun/.gdbinit:12:源文件中的错误:
取消设置shell变量的作用:
〜%unsetenv外壳
〜%gdb -q -batch
环境变量“SHELL”未定义。
再见
[下1(进程6992)正常退出]
在这种情况下, run使用/bin/sh展开参数列表。 将SHELL设置为/bin/bash或/bin/dash将使用这些shell来展开参数列表,例如
〜%setenv SHELL / bin / bash
〜%gdb -q -batch
SHELL = / bin / bash
警告:在0x7ffff7ffa000添加的符号文件系统提供的DSO中找不到可加载部分
再见
[下1(进程7280)正常退出]
奇怪的是,“无法加载部分”的错误只发生在shell变量明确设置的时候。
为什么/bin/tcsh不起作用仍然是莫名其妙的。 在我的情况下, /bin/tcsh的权限是
〜%ls -lh / bin / tcsh
lrwxrwxrwx 1 root root 13 Oct 14 2011 / bin / tcsh - > / usr / bin / tcsh
〜%ls -lh / usr / bin / tcsh
-rwxr-xr-x 1 root root 382K 2011年10月14日/ usr / bin / tcsh
这个问题也可能在我的.tcshrc文件中导致shell以非交互模式崩溃。
我将登录shell更改为bash,gdb不再需要root权限进行调试。 这是最新的:
我的.gdbinit文件:
(bash)〜%more .gdbinit
展示环境SHELL
文件/ bin / echo
运行“运行.gdbinit”
(bash)〜%
和运行gdb的结果:
(bash)〜%gdb -q -batch
SHELL = / bin / bash
运行.gdbinit
[下1(进程3174)正常退出]
(bash)〜%
我还是不明白为什么tcsh不起作用,而且很好奇。 所以如果有人有可能的解释,请评论。
我有同样的问题,原因是有人在gdb可执行文件中设置了粘滞位:
cruiz> ls -l /usr/bin/gdb -rwsr-sr-x 1 root root 4190760 2010-05-05 07:55 /usr/bin/gdb*
我改变了它( chmod 755 /usr/bin/gdb ),现在它工作。
之前:
cruiz> gdb ... (gdb) shell csh: Permission denied.
改变之后:
cruiz> gdb (gdb) shell cruiz>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。