为什么gdb需要root权限才能调试用户程序?

2024-02-13

我已经相当成功地使用 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权限 https://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process- 似乎不起作用。

是否需要做一些事情才能让 gdb 在没有 root 权限的情况下运行程序?我知道在 OSX 中,gdb 必须进行协同设计。 Ubuntu/Linux 有类似的东西吗?


我将登录 shell 更改为 bash,并且 gdb 不再需要 root 权限来调试。这是最新的:

My .gdbinit file:



(bash) ~ % more .gdbinit
show environment SHELL
file /bin/echo
run 'running .gdbinit'
(bash) ~ % 
  

以及运行结果gdb :



(bash) ~ % gdb -q -batch
SHELL = /bin/bash
running .gdbinit
[Inferior 1 (process 3174) exited normally]
(bash) ~ % 
  

不过,我仍然不明白为什么 tcsh 不起作用,并且很想知道。因此,如果有人有可能的解释,请发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么gdb需要root权限才能调试用户程序? 的相关文章

  • 分割 tar.bz2 文件并单独提取每个文件

    我可以将一个大的 tar bz2 文件分割成几个较小的文件并在 Ubuntu 中单独提取这些小 tar bz2 文件吗 Thanks 我认为这不容易实现 A tar bz2是单个流 它没有像这样的索引zip这将允许跳到存档中特定文件的开头
  • 仅为我自己禁用和重新启用地址空间布局随机化

    我想在我的系统 Ubuntu Gnu Linux 2 6 32 41 server 上禁用地址空间布局随机化 ASLR 但是 如果我使用 sysctl w kernel randomize va space 0 我认为这一更改将影响系统上的
  • 64位版本的adb和fastboot?

    我在 Debian 7 3 x64 已完全修补 上发现了以下错误 我很确定这是因为adb即使在其 SDK 工具的 64 位发行版中也是 32 位 which adb opt android sdk platform tools adb op
  • C:运行系统命令并获取输出? [复制]

    这个问题在这里已经有答案了 我想在 Linux 中运行一个命令并获取其输出内容的返回文本 但我do not想要将此文本打印到屏幕上 有没有比制作临时文件更优雅的方法 你想要 popen http linux die net man 3 po
  • 如何从内部找到C++ Linux程序的完整路径?

    我有这个要求 我需要从内部找到 C 程序的完整路径 对于Windows 我有以下解决方案 argv 0 可能包含也可能不包含完整路径 但我需要确定 TCHAR drive MAX DRIVE dir MAX DIR base MAX FNA
  • 如何在 arago 项目构建中编写自己的食谱包

    我如何在 arago 项目构建中编写自己的食谱包 我知道它可以是 bitbake 文件 但我怎么写 不知道 我在互联网上搜索 但未能找到任何好的来源 有人可以给我提供链接或示例来开始吗 RegardsLinux 学习者 使用 Bitbake
  • 将任何当前目录“./”添加到Linux中的搜索路径[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将任何当前目录 添加到 Linux 中可执行文件的搜索路径中 我知道这是一个旧答案 但如果其他人像我一样通过谷歌偶然发现这个问题 这里
  • 使用 eclipse 调试 OpenJDK 源代码

    在我的项目中 我想使用 eclipse 调试 OpenJDK 版本 8 的 C C 源代码 为此 我做了以下工作 编译了 OpenJDK8 with debug level slowdebug使用这个readme http hg openj
  • 如何删除名称最大的目录?

    我有一个包含子目录的目录 其中一些名称是数字 不看的话 我不知道数字是多少 如何删除名称最大的子目录 我认为解决方案可能会将子目录按相反顺序排序 并选择以数字开头的第一个子目录 但我不知道该怎么做 感谢您的帮助 cd yourdir go
  • 不必记住我要拉和推的分支的最佳别名是什么?

    这里非常懒 不喜欢输入太多 特别不喜欢记住我在哪个分支上拉出和推入 我经常犯这样的错误git pull来自非主分支 或者更糟糕的是 进行推送并且目标分支不正确 并且我留下了未推送或未提交的更改 我在我的 bashrc以下别名可以提供帮助 a
  • 真实设备中的 Android strace

    我有以下情况 我想监控Android手机上的系统调用 所以 我编写了一个脚本来做到这一点 使用 Android 模拟器可以完美地工作 将应用程序的痕迹写入我的 Ubuntu 上的特定文件中 问题是当我连接一个真实的手机来分析它时 它在结果文
  • 如何通过jiffies实现经过时间

    我想了解如何在 C 中使用 jiffies 实现经过时间 假设我有一系列指令 include
  • Linux:如何调试 SIGSEGV?如何追踪错误源?

    我的火狐浏览器从今天开始崩溃了 我没有更改系统或 Firefox 配置上的任何内容 I use strace ff o dumpfile txt firefox来追踪问题 这没什么大帮助 我在两个生成的进程转储中看到了段错误 但我怎样才能t
  • 从多个进程附加到单个文件的“线程安全”?

    假设我有 X 个进程打开文件 Y 进行追加 每个进程一次只写入一行 带有 n 真正的日志条目 文件 Y 中的每一行是否保证不会错误地交错 更新 本地附加文件系统 问题取决于正在进行什么类型的写入 如果您使用带缓冲的标准 I O 这通常是大多
  • 是什么决定了 getdents 返回目录条目的顺序?

    背景是我有一个现有的应用程序 其中列出了目录条目 strace 显示它只是调用 getdents 并按返回的顺序列出它们 我希望它们以与不带参数调用 ls 相同的顺序显示 是否可以通过某种方式更新目录数据来实现此目的 FS 是 ext4 如
  • Tensorflow推荐的系统规格?

    我开始在我的 RHEL 6 5 机器上安装 Tensorflow 但事实证明 Tensorflow 需要 glibc gt 2 17 而 rhel 6 5 上默认的 glibc 是 2 12 我想知道是否有人可以帮助我了解张量流的最低 推荐
  • 为什么每次在 GDB 中构建和反汇编函数时都会得到相同的地址?

    每次反汇编函数时 为什么总是得到相同的指令地址和常量地址 例如 执行以下命令后 gcc o hello hello c ggdb gdb hello gdb disassemble main 转储代码将是 当我退出 gdb 并重新反汇编 m
  • __NR_gettid 和 SYS_gettid 之间的区别

    我只是在寻找在 Linux 中获取唯一线程 ID 的方法 我发现的方法是将两个参数中的任何一个作为参数进行系统调用 NR gettid OR SYS gettid 有人能解释一下它们之间有何不同吗 Nothing in
  • 无法使用 linux perf 对硬件缓存事件进行采样

    由于某种原因 我无法采样 perf record 硬件缓存事件 perf record e L1 dcache stores a c 100 sleep 5 perf record Woken up 1 times to write dat
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51

随机推荐