gpt4 book ai didi

debugging - 如何找到使用 gdb 定义的文件?

转载 作者:行者123 更新时间:2023-12-04 15:20:03 24 4
gpt4 key购买 nike

当我输入 list mystruct进入 gdb,我收到用于定义 mystruct 的代码行。我如何要求 gdb 给我它正在读取的文件以打印这些行?从 gdb python 接口(interface)获取该文件会更好。越容易解析越好。

谢谢!

最佳答案

为了显示类型的定义,有一个命令 ptype :

$ ptype mystruct
...
要知道类型在哪里定义,命令 信息类型正则表达式 :
$ info types ^mystruct$
<filename>:<line>
并打印源文件的行,命令 列出文件名:start_line,文件名:end_line :
$ list myfile.c:100,myfile.c:110
如果还不够
$ list +
请注意,可能有多个相同的类型定义,所以 信息类型 可以给出几个位置。
更新
因为这是编译器(生成调试信息,例如 DWARF)和 之间的兼容性问题。 gdb 读取它,由于某种原因,并不总是可以检索详细信息,例如电话号码。这可以通过使用特定工具来解决,例如对于 DWARF,有一个 dwarfdump 工具,它可以访问文件中的所有 DWARF 信息。结构类型的输出
struct mystruct {
int i;
struct sample *less;
}
好像:
$ dwarfdump -ie ./a.out
...
< 1><0x00000079> structure_type
name "mystruct"
byte_size 0x0000000c
decl_file 0x00000002 ../sample.h
decl_line 0x00000003
sibling <0x000000a8>
< 2><0x00000085> member
name "i"
decl_file 0x00000002 ../sample.h
decl_line 0x00000004
type <0x0000004f>
data_member_location 0
< 2><0x0000008f> member
name "less"
decl_file 0x00000002 ../sample.h
decl_line 0x00000005
type <0x000000a8>
data_member_location 4
在这里,您不仅可以了解类型声明从哪一行开始,还可以了解每个成员的行号。
输出格式不是很方便,而且很重 - 您应该编写自己的解析器。但是使用 libdwarf 编写自己的工具可能会更好。或使用 pyelftools在 python 上。 Here是例子之一。

关于debugging - 如何找到使用 gdb 定义的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com