debugging相关内容

如何在 gdb 中列出类方法?

我一直在谷歌上搜索并检查 gdb 手册,但似乎无法找到我正在尝试做的事情的答案. 有没有办法让 gdb 打印出给定类类型的所有方法的列表?print 命令似乎只显示数据成员和字段,没有显示任何方法. 此外,更进一步,有没有办法打印给定基 * 指针的所有正确虚拟方法?比如说: 结构 A{虚空 foo() {}};结构 B:公共 A{无效 foo() {}};主函数(){A *b = 新 ..
发布时间:2022-01-20 20:35:22 C/C++开发

在 Clion 的调试器中,如何显示一个 int 数组的全部内容

现在它只显示数组的第一个元素,但我想要查看数组中的所有元素.我认为 Clion 正在使用 GDB. 编辑:我特指堆上的数组.堆栈上的数组可以可视化. 解决方案 很遗憾,CLion 目前不支持该功能.正如 JetBrains 员工 建议的那样,您可以使用解决方法.在 Evaluate/Watches 窗口中使用以下表达式: (MyType[128])myArray 您可以使用任意数 ..
发布时间:2022-01-20 20:35:01 C/C++开发

使用 GDB 调试从 shell 脚本调用的 C++ 程序

我有一个极其复杂的 shell 脚本,它在其中调用一个我想通过 GDB 调试的 C++ 程序.将这个 c++ 程序与 shell 分开是非常困难的,因为它有很多分支和很多环境变量设置. 有没有办法在这个 shell 脚本上调用 GDB?看起来 gdb 需要我直接调用 C++ 程序. 解决方案 有两种选择: 直接在 shell 脚本中调用 GDB.这意味着您没有重定向标准输入和标 ..
发布时间:2022-01-20 20:34:37 C/C++开发

gdb:找不到新线程:一般错误

当我对加载链接到 pthread 的 .so 的程序运行 GDB 时,GDB 报告错误“找不到新线程:通用错误". 请注意,我运行的可执行文件未与 pthread 链接. 有什么线索吗? $ gdb --args lua -lluarocks.requireGNU gdb (GDB) 7.0-ubuntu版权所有 (C) 2009 Free Software Foundation, ..
发布时间:2022-01-20 20:33:28 其他开发

macOS Mojave:如何实现协同设计以启用调试(gdb)?

从 10.5 开始,围绕 macOS 的协同设计问题有很多主题.我想要实现的是,让 Geany 使用 GNU 调试器 (gdb).在 geany 中可以找到调试器,但(已经非常清楚)错误消息是: 来自调试器后端的错误消息:无法找到进程 ID 39847 的 Mach 任务端口:(os/kern) 失败 (0x5).\n(请检查 gdb 是否经过代码签名 - 请参阅 taskgated(8))无法 ..
发布时间:2022-01-20 20:32:46 其他开发

gdb:如何打印当前行或查找当前行号?

list 命令打印一组行,但我需要一行,我在哪里以及可能发生错误的位置. 解决方案 我在调试时确实得到了相同的信息.虽然不是在我检查堆栈跟踪时.我认为您很可能会使用优化标志.检查此 链接 - 相关的东西. 尝试使用 -g3 进行编译,删除任何优化标志.那么它可能会起作用.HTH! ..
发布时间:2022-01-20 20:32:29 其他开发

使用 Cygwin 可执行文件中的堆栈转储

所以我写了错误的代码,偶尔会崩溃......并创建了一个堆栈转储文件. 使用 addr2line 我可以通过将地址解码为 1 来弄清楚程序是如何到达崩溃点的.是否有替代工具可以使用堆栈转储来简化调试?有没有办法在 Insight/Gdb 中加载这些信息? 解决方案 您可以指示 Cygwin 在发生故障时及时启动您的 gdb 调试器.为此,请将 error_start=action 添 ..
发布时间:2022-01-20 20:32:07 其他开发

GCC -g 与 -g3 GDB 标志:有什么区别?

在使用 gcc 或 Clang 编译 C 源代码时,我总是使用 -g 标志为 gdb 生成调试信息. gcc -g -o helloworld helloworld.c 我注意到有些人推荐-g3.-g 和 -g3 标志之间有什么区别?-g和-ggdb还有区别吗? 解决方案 来自 文档: -g 以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2 ..
发布时间:2022-01-20 20:31:38 其他开发

GDB 显示调用堆栈上函数地址的当前编译二进制文件

在 Visual Studio 中,您可以看到函数所在的位置,即在哪个编译的二进制文件中.例如: GDB 有命令吗? 如果你加载一个 dll,一个符号的多个版本可以加载两次.必须了解代码是在 .exe 中执行还是在已加载的 .dll 库之一中执行.Visual Studio 调试器在提供的屏幕截图中显示此信息(虽然它是针对 C#,但我只是从网站上复制了它). 当我使用 Visua ..
发布时间:2022-01-20 20:31:07 C/C++开发

如何在 gdb 中附加进程时有选择地读取和加载符号?

我的二进制文件使用了许多不同的共享库.使用 gdb 附加该进程时,从所有这些库加载和读取符号大约需要 5 分钟. 有没有办法在使用 gdb 附加进程时选择性地读取和加载符号? 解决方案 你可以set auto-solib-add off 然后使用 sharedlibrary 命令选择性地加载符号.示例: $ gdb -e ./a.out(gdb) 设置 auto-solib-add ..
发布时间:2022-01-20 20:26:58 其他开发

GDB 说“没有符号表",但 nm 显示文件有调试符号

我正在尝试使用 GDB 调试一个简单的 C 项目,但无论我如何编译,GDB 似乎都找不到该程序的调试符号. 当我将程序加载到 GDB 中时,它声称已成功读取符号,因为它会打印 从/home/edward/读取符号...完成. 但是,当我运行程序时,由于分段错误而中断,然后键入 info locals,它说 没有可用的符号表信息. 另外,bt 显示执行在我编写的 ..
发布时间:2022-01-20 20:22:40 其他开发

GDB 可以更改正在运行的程序的汇编代码吗?

我想为/bin/ls 添加一些额外的功能. 所以我在gdb上启动它,并在开头添加了一个断点. 现在的问题是:如何更改内存中正在运行的程序的代码?我可以看到汇编代码,但我无法修改.我该怎么做? 例如,在 Windows 上,我可以使用 oldbg 轻松做到这一点.在 Linux 上怎么样? (我知道这样做只会更改内存中进程的代码.所以我可以将内存转储到文件中,然后我会将更改保存在 ..
发布时间:2022-01-20 20:22:06 服务器开发

显示在 gdb 中执行的每条汇编指令

我目前有一个棘手的错误发生在我无法访问源代码或符号的地方,即我可以看到发生崩溃的指令及其地址,但仅此而已.我想做的是让 gdb 在不需要交互的情况下运行并显示每条指令,但我还没有找到方法. 我希望实现的是这样的: (gdb)/* 一些命令 */0x2818a7c0:推送 %ebp0x2818a7c1: 移动 %esp,%ebp0x2818a7c3: 推送 %ebx0x2818a7c4: 低 ..
发布时间:2022-01-20 20:21:28 其他开发

在 qemu 中使用 gdb 调试引导加载程序

Freedos 引导加载程序似乎存在问题.(在某些情况下,引导代码似乎找不到内核.) 所以我正在尝试使用 gdb 调试 qemu 中的引导加载程序.按照在几个 wiki 和免费在线课程资料上找到的说明,我像这样运行 qemu qemu-system-i386 -fda fdboot.img -boot a -s -S 然后像这样连接gdb $ gdb(gdb) 目标远程 localho ..
发布时间:2022-01-20 20:20:35 其他开发

使 GDB 在调用函数时打印控制流

如何在调用 gdb 时打印感兴趣的函数,并根据它们在堆栈中的深度进行缩进? 我希望能够说出类似(编造)的话: (gdb) trace Foo* Bar* printf 并让 gdb 打印所有以 Foo 或 Bar 开头的函数,因为它们被调用.有点像 gnu cflow,除了使用调试符号并且只打印实际调用的函数,而不是所有可能的调用流. 无法提供帮助的工具包括 cachegrind、 ..
发布时间:2022-01-20 20:19:50 其他开发