gdb相关内容

使 gdb 从特定路径加载共享库

我在执行应用程序时获得了一个核心,我保存了可执行文件、核心文件和应用程序在 /tmp 中使用的共享库,以便以后检查它们.然后我修改了库,重建它并再次启动可执行文件.现在,当我尝试调试核心时,gdb 正在从其原始路径加载共享库,而不是从我保存原始库的目录 /tmp 加载. 例如,原始路径是 /opt/mydir/lib/libmylib.so.0.gdb 正在加载这个共享库,而我希望它加载 / ..
发布时间:2022-01-20 20:15:04 其他开发

如何在写入以其名称已知的特定文件时停止gdb中的程序

如何在 gdb 中设置断点以在每次写入以文件名已知的特定文件时停止程序? 解决方案 您可以使用 catch syscall write 让 GDB 在每次 write 系统调用时停止. 由于 write 对文件描述符进行操作,而不是对命名文件进行操作,因此您不能将此断点设置为以名称为条件;您必须首先找出与您的“有趣"文件相对应的文件描述符. 在 Linux 上,您可以查看 ls ..
发布时间:2022-01-20 20:14:33 其他开发

GDB 显示堆栈帧的函数参数不正确

每当 GDB 进入函数时,它不会在帧信息中显示正确的参数,而是打印垃圾数据 gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 $ gcc t.c -g #不使用其他标志 GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2 程序(t.c): #include无效的富(int v){printf("BAR ..
发布时间:2022-01-20 20:14:17 服务器开发

可以在 gdb 中调用内联函数和/或使用 GCC 发出它们吗?

我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除.但是假设我想从 gdb 中调用一个内联函数,并且我知道它的名称和参数.我想我应该能够做到这一点,但我明白了: 无法评估函数——可能是内联的 我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面.没什么大惊喜.我想要的是一种生成这些内联函数的可见定义的方法.我可以访问当前包含内联定义的头文件,但我无法真正修改 ..
发布时间:2022-01-20 20:14:03 C/C++开发

无法使用 python 支持安装 GDB

问题是,我想在我的 GDB 安装中支持 python.我跑的时候 ./configure --with-python 与 制作 但是,在 GDB 源文件目录中,“make"退出并显示以下信息: 检查是否使用python...是检查python ...(缓存)/home/tools/tools/../bin/64//python检查python2.7 ...否配置:错误:python 丢失 ..
发布时间:2022-01-20 20:13:49 Python

如何使用 GDB 或 LLDB 之类的调试器在 Rust 中调试 crate?

我正在写一个新的板条箱.我为它编写了一些测试并使用 cargo test 运行测试.之后,在 target 文件夹中生成了一些 test_xxx 可执行文件.我在 Cargo.toml 中启用了调试选项.通过运行 gdb targets/test_xxx,我可以列出和调试 test_xxx 可执行文件中的代码.但是,我无法进入板条箱中的功能.没有调试信息.如何构建/链接 crate 以包含其调试信 ..
发布时间:2022-01-20 20:13:43 其他开发

局部变量的内存分配浪费

这是我的程序: void test_function(int a, int b, int c, int d){整数标志;字符缓冲区[10];标志 = 31337;缓冲区[0] = 'A';}int main() {test_function(1, 2, 3, 4);} 我用调试选项编译这个程序: gcc -g my_program.c 我使用 gdb 并使用 intel 语法反汇编 tes ..
发布时间:2022-01-20 20:13:33 其他开发

gdb 会暂时给页面写权限吗?

我正在调试 Linux 应用程序中的 seg 错误,该错误是由程序试图更改静态常量数组结构引起的(因此数据位于 ELF 的只读部分中,随后加载到页面中授予只读权限). 在 GDB 中,我在执行错误存储的汇编程序行上放置了一个断点,当它停在那里时,我使用 GDB 手动执行了等效的写入操作.GDB 毫无怨言地做到了这一点,并且读回该值证明它确实已被写入.我查看了/proc/thepid/maps ..
发布时间:2022-01-20 20:13:20 服务器开发

如何阻止 GDB 执行“break main"默认情况下在 Eclipse 中?

我正在使用 Eclipse 和 MinGW 开发一个 C 项目.运行此项目的调试版本时,gdb 总是在输入 main() 时中断.我明白为什么这很有用,但对于我当前的项目,我不希望发生这种情况. 我读到有一个命令 (gdb) 中断主要 从命令行运行时会完成相同的行为. 目前我没有 .gdbinit 文件. 目前 gdb 在从命令行运行时不会在进入 main 时停止,但在从 E ..
发布时间:2022-01-20 20:13:05 Java开发

将 XCode 4 控制台的调试输出重定向到日志文件

我正在为 iPhone 进行自动化测试,我需要将 gdb 的输出重定向到日志文件.一些在线搜索发现以下两行在开始调试之前在命令行运行: defaults write com.apple.Xcode PBXGDBDebuggerLogToFile YES默认写入 com.apple.Xcode PBXGDBDebuggerLogFileName ...但它们似乎对我不起作用 ..
发布时间:2022-01-20 20:12:48 其他开发

如何设置最早的断点

我试图在模块加载到 gdb 后立即停止.假设二进制完全去掉了所有符号信息,所以没有main. 理想情况下,我会在入口点设置断点,但这个想法由于重定位而失效: (gdb) 信息目标来自“./application"的符号.本地执行文件:`./application',文件类型为 elf64-x86-64.入口点:0xc154...(gdb) 中断 *0xc1540xc154 处的断点 1(g ..
发布时间:2022-01-20 20:12:41 其他开发

GDB:自动“下一个"?

这次快点. gdb 是否有可能(除了永远按 Enter 键)通过程序逐行不断地next 来查找错误发生的位置? 编辑:continue 不是我想要的;我想有效地看到完整的程序执行,一行一行,就像你一遍又一遍地从 nexting 得到的那样. 解决方案 这里有这样一个 hack,我有点不好意思发布它.但是,如果您只需要一次性的,它可能足以让您获得所需的信息.确实应该有更好的方法. ..
发布时间:2022-01-20 20:12:35 其他开发

gdb 错误不是可执行格式:文件格式无法识别

我正在尝试在 Ubuntu 16.04 上调试一个简单的“hello world"C++ 程序,但 gdb 无法识别可执行文件格式.但是,我能够在命令行上成功运行可执行文件.这是代码 #include 使用命名空间标准;int main() {cout 我使用命令编译程序文件TestProject.cpp g++ -g TestProject.cpp -o hello ..
发布时间:2022-01-20 20:12:20 C/C++开发