问题标签 [dwarf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何将 STABS 调试信息放入 Win32 PE 文件?
我问这个是因为我接到了一项我还不知道如何处理的任务。你看,我们处于可以在运行非常旧的 linux 内核的虚拟机上执行传统 a.out 程序的情况。我们希望本地 MinGW gdb 以某种方式调试程序。有人建议我们将 a.out 文件转换为包含调试符号的 PE 文件并将其发送到 GDB 进行处理,同时在虚拟机上实际运行 UNIX a.out 文件。a.out 文件中唯一可用的调试符号是 STABS,因为 VM 上使用的 GCC 版本非常旧。
我知道可以将 STABS 调试信息添加到 PE 文件中。GCC 做到了,我已经做了足够全面的实验来得出 STABS 与 MinGW GDB 一起工作的结论objdump
。gdb
那么我该如何实现呢?GCC 是如何处理它的?
谢谢你。
assembly - 矮人你好世界组装示例或教程?
我正在用 nasm 编写汇编级别的人类可说编程语言。我注意到 Dwarf 调试是开发它的重要组成部分。
为了让它以后成为自托管,不仅要编译为 ELF,还要支持 Dwarf 以使调试可行。对于 ELF,有一个很好的 nasm 示例,说明如何制作 ELF 标头 http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html http://blog.markloiseau.com/2012/05/tiny -64 位精灵可执行文件/
我想知道是否有或什至可以为 DWARF 制作类似的东西,一个示例 hello world,其中包括与 gdb 一起使用所需的 DWARF 部分。有了这样一个例子,理解 DWARF 会容易得多,而不是通过主要指 C 的相当神秘的文档。我发现最接近的是 IBM 的指南,它有一个小程序,可以让你有选择地在每个功能基础 www.ibm.com/developerworks/library/os-debugging/
无论如何,如果您碰巧能够制作一个 nasm hello world dwarf 示例,我相信全世界都会非常欣赏它,因为它会使 dwarf 格式更易于访问。也许有人甚至可以在 fasm 或除 nasm 之外的其他汇编程序中实现它。
apache - gprof 给出侏儒错误
我已经用gcc
选项在不同的服务器上编译了我的 apache2,
我将此 apache2 二进制文件复制到不同的服务器并执行一次并得到gmon.out
.
但是在使用命令创建分析文件时,
我得到以下错误行,
大约 100 行类似的错误。如何摆脱这个来生成gprof分析文件?
编译操作系统:
执行操作系统:
gcc - LD 需要 DWARF 版本 3 或 2,但我的是版本 4
经过数小时研究(并尝试)如何id3lib
在 Qt(Windows)上安装,但没有成功,我决定使用TagLib 的 library。
我按照本教程为 Qt 构建了兼容版本的 taglib,但还有另一个问题(此处为完整日志):
在 CMake 中,我做了configure
> MinGW Makefiles
。
谁能告诉如何解决它?
环境:
- 视窗 7(64 位);
- CMake 2.8.12.1;
- 标签库 1.9.1;
- GCC 3.4.5;
- Qt 5.1.1。
gdb - 如何从 DWARF 版本 4 转换为版本 2 ?(无需重新编译)
我正在尝试调试一个使用 DWARF-4 的程序,但我的 gdb 太旧并且只能理解 DWARF-2。
我无法更新 gdb 也无法重新编译,所以我需要一种方法来转换它们,也许可以使用一些 binutils 工具?
c - gcc 程序集。讨论 cfa, %ebp, %esp 中的值和指令中的数字,如 .cfi_def_register 4, 4 中的 4
问题1:当执行第8行时,我推断%esp和%ebp都等于CFA-4,它们指向存储在堆栈中的返回地址。这样对吗?
大会:
C代码:
问题2:我不知道为什么要在代码中插入.cfi_offset 5, -8 , .cfi_def_cfa_register 5 , .cfi_restore 5和.cfi_def_cfa 4, 4也是如此。我找到了如何使用这些指令:
- .cfi_offset 寄存器,偏移量
- 寄存器的先前值保存在偏移量,从 CFA 偏移量。
- .cfi_def_cfa_register 寄存器
- .cfi_def_cfa_register 修改计算 CFA 的规则。从现在开始,将使用寄存器代替旧的。偏移量保持不变。
- .cfi_restore 寄存器
- .cfi_restore 表示 register 的规则现在与函数开始时的规则相同,在 .cfi_startproc 添加的所有初始指令都已执行之后。
- .cfi_def_cfa 寄存器,偏移量
.cfi_def_cfa 定义了计算 CFA 的规则:从寄存器中获取地址并添加偏移量。
所以我想知道1#、2#、3#……这些数字分别代表哪个寄存器。
debugging - 如何解码 debug_line 部分?
我试图弄清楚 DWARF 2 debug_line 部分是如何编码的。标准论文(http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf)对我没有多大帮助,我真的不明白以下内容如何:
代表某事。那里编码了“无符号整数”字符串,但它之前的 0x02 值..那代表什么?我什至找不到带有 DWARF 2 常量的标准 enum/define 标头。有人可以阐明如何解析 DWARF 2 中的 debug_line 吗?
c - 使用 DWARF 定位全局变量(和重定位)
当动态链接二进制与库时,重定位信息用于绑定不同 ELF 对象的变量/函数。然而 DWARF 不受重定位的影响:调试器应该如何解析全局变量?
假设我有 liba.so (ac) 定义一个全局变量(使用 GNU/Linux 和 GCC 或 Clang):
和一个与 liba.so (bc) 链接的程序 b:
我希望“foo”将在 liba.so 中实例化,但实际上它在 liba.so 和 b 中都实例化:
使用的 foo 变量(b 和 lib.so 都使用)在 b 的 .bss 中,而不是在 liba.so 中:
foo 变量被实例化了两次:
在 liba.so 中一次(与程序 b 链接时不使用此实例)
一次在 b 中(这个实例是 b 中另一个的实例)。
(我真的不明白为什么在可执行文件中实例化了变量。)
DWARF 信息中的 b 中只有一个声明(如预期的那样):
在 liba.so 中找到一个位置:
此地址是 liba.so (.data) 中 foo 的(未使用的)实例的位置。
- 我最终得到了 foo 全局变量的 2 个实例(在 liba.so 中,一个在 b 中);
- DWARF 只能看到第一个;
- 只使用第二个。
调试器应该如何解析 foo 全局变量?
c - DWARF 行表中的源列号
对于 C/C++ 源文件中的任何元素,我希望能够在其编译的可执行文件中确定相应的内存位置。使用调试进行编译并使用生成的 DWARF 信息对实现这一目标大有帮助,但离我的目标还差得很远。GCC 似乎只使用行号生成 DWARF .debug_line 信息,将列号保留为 0!DWARF 规范允许指定列号对我来说似乎很奇怪,但 GCC 似乎没有生成它们。
有什么我遗漏的 - 也许是一些配置或命令行参数让 GCC 知道我想要在我的调试信息中列出列?或者也许有一种完全不同的方式来实现我的目标?
下面是一段简单的代码来演示 DWARF 中缺少列号:
编译:
然后使用以下命令查看 DWARF 信息:
这是输出:
ios - DWARF 和带有 dSYM 文件的 DWARF 有什么区别?
XCode 支持此构建设置的这 2 个值:
构建设置 > 构建选项 > 调试信息格式。
有人可以解释这些差异吗?