gdb相关内容
我在执行应用程序时获得了一个核心,我保存了可执行文件、核心文件和应用程序在 /tmp 中使用的共享库,以便以后检查它们.然后我修改了库,重建它并再次启动可执行文件.现在,当我尝试调试核心时,gdb 正在从其原始路径加载共享库,而不是从我保存原始库的目录 /tmp 加载. 例如,原始路径是 /opt/mydir/lib/libmylib.so.0.gdb 正在加载这个共享库,而我希望它加载 /
..
..
..
一个演示我的问题的简单示例: //test.c#include int foo1(int i) {我 = 我 * 2;返回我;}无效 foo2(int i) {printf("来自 foo 的问候!i = %i", i);}int main() {诠释 i = 7;foo1(i);foo2(i);返回0;} $ clang -o test -O0 -Wall -g test.
..
如何在 gdb 中设置断点以在每次写入以文件名已知的特定文件时停止程序? 解决方案 您可以使用 catch syscall write 让 GDB 在每次 write 系统调用时停止. 由于 write 对文件描述符进行操作,而不是对命名文件进行操作,因此您不能将此断点设置为以名称为条件;您必须首先找出与您的“有趣"文件相对应的文件描述符. 在 Linux 上,您可以查看 ls
..
..
每当 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
..
我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除.但是假设我想从 gdb 中调用一个内联函数,并且我知道它的名称和参数.我想我应该能够做到这一点,但我明白了: 无法评估函数——可能是内联的 我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面.没什么大惊喜.我想要的是一种生成这些内联函数的可见定义的方法.我可以访问当前包含内联定义的头文件,但我无法真正修改
..
问题是,我想在我的 GDB 安装中支持 python.我跑的时候 ./configure --with-python 与 制作 但是,在 GDB 源文件目录中,“make"退出并显示以下信息: 检查是否使用python...是检查python ...(缓存)/home/tools/tools/../bin/64//python检查python2.7 ...否配置:错误:python 丢失
..
我正在写一个新的板条箱.我为它编写了一些测试并使用 cargo test 运行测试.之后,在 target 文件夹中生成了一些 test_xxx 可执行文件.我在 Cargo.toml 中启用了调试选项.通过运行 gdb targets/test_xxx,我可以列出和调试 test_xxx 可执行文件中的代码.但是,我无法进入板条箱中的功能.没有调试信息.如何构建/链接 crate 以包含其调试信
..
这是我的程序: 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
..
我正在调试 Linux 应用程序中的 seg 错误,该错误是由程序试图更改静态常量数组结构引起的(因此数据位于 ELF 的只读部分中,随后加载到页面中授予只读权限). 在 GDB 中,我在执行错误存储的汇编程序行上放置了一个断点,当它停在那里时,我使用 GDB 手动执行了等效的写入操作.GDB 毫无怨言地做到了这一点,并且读回该值证明它确实已被写入.我查看了/proc/thepid/maps
..
..
我正在使用 Eclipse 和 MinGW 开发一个 C 项目.运行此项目的调试版本时,gdb 总是在输入 main() 时中断.我明白为什么这很有用,但对于我当前的项目,我不希望发生这种情况. 我读到有一个命令 (gdb) 中断主要 从命令行运行时会完成相同的行为. 目前我没有 .gdbinit 文件. 目前 gdb 在从命令行运行时不会在进入 main 时停止,但在从 E
..
已知%rsp指向栈帧的顶部,%rbp指向栈帧的底部.那我就无法理解为什么 %rbp 在这段代码中是 0x0: (gdb) x/4xg $rsp0x7ffffffffe170: 0x00000000004000dc 0x00000000000000100x7ffffffffe180: 0x0000000000000001 0x00007ffffffffe487(gdb) disas HelloWo
..
我正在为 iPhone 进行自动化测试,我需要将 gdb 的输出重定向到日志文件.一些在线搜索发现以下两行在开始调试之前在命令行运行: defaults write com.apple.Xcode PBXGDBDebuggerLogToFile YES默认写入 com.apple.Xcode PBXGDBDebuggerLogFileName ...但它们似乎对我不起作用
..
我试图在模块加载到 gdb 后立即停止.假设二进制完全去掉了所有符号信息,所以没有main. 理想情况下,我会在入口点设置断点,但这个想法由于重定位而失效: (gdb) 信息目标来自“./application"的符号.本地执行文件:`./application',文件类型为 elf64-x86-64.入口点:0xc154...(gdb) 中断 *0xc1540xc154 处的断点 1(g
..
这次快点. gdb 是否有可能(除了永远按 Enter 键)通过程序逐行不断地next 来查找错误发生的位置? 编辑:continue 不是我想要的;我想有效地看到完整的程序执行,一行一行,就像你一遍又一遍地从 nexting 得到的那样. 解决方案 这里有这样一个 hack,我有点不好意思发布它.但是,如果您只需要一次性的,它可能足以让您获得所需的信息.确实应该有更好的方法.
..
我在加载位于当前目录中的 .gdbinit 文件时遇到问题.在启动 gdb 时,我得到了这个: GNU gdb (GDB) 7.5-ubuntu版权所有 (C) 2012 Free Software Foundation, Inc.许可证 GPLv3+:GNU GPL 版本 3 或更高版本 这是免费软件:您可以自由更改和重新分发
..
我正在尝试在 Ubuntu 16.04 上调试一个简单的“hello world"C++ 程序,但 gdb 无法识别可执行文件格式.但是,我能够在命令行上成功运行可执行文件.这是代码 #include 使用命名空间标准;int main() {cout 我使用命令编译程序文件TestProject.cpp g++ -g TestProject.cpp -o hello
..