当我键入命令maint info symtabs时,我得到以下输出:
{ objfile /home/jokoi/NOTE/Linux/MEMORY/c_file/testalloc ((struct objfile *) 0x563c7d6a9320)
{ ((struct compunit_symtab *) 0x563c7d703da0)
debugformat DWARF 2
producer GNU C17 9.3.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection
dirname /home/jokoi/NOTE/Linux/MEMORY/c_file
blockvector ((struct blockvector *) 0x563c7d7523d0)
{ symtab testalloc.c ((struct symtab *) 0x563c7d703e20)
fullname /home/jokoi/NOTE/Linux/MEMORY/c_file/testalloc.c
linetable ((struct linetable *) 0x563c7d752400)
}
{ symtab /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h ((struct symtab *) 0x563c7d703e50)
fullname (null)
linetable ((struct linetable *) 0x0)
}
{ symtab /usr/include/x86_64-linux-gnu/bits/types.h ((struct symtab *) 0x563c7d703e80)
fullname (null)
linetable ((struct linetable *) 0x0)
}
{ symtab /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h ((struct symtab *) 0x563c7d703eb0)
fullname (null)
linetable ((struct linetable *) 0x0)
}
......
}以0x563c7d7开头的地址是什么意思。
当我试着检查它的时候,我被告知Cannot access memory at address 0x563c7dc94330
谁能告诉我如何使用这个地址来检查我的GDB中的symtab结构?
发布于 2021-09-21 02:39:43
谁能告诉我如何使用这个地址来检查我的GDB中的symtab结构?
maint命令集是为GDB维护者(即维护或调试GDB本身的人)准备的。
打印的地址是GDB进程中的地址,它们与下级进程(由GDB调试的进程)没有任何关系。
当我试着检查它的时候,我被告知
Cannot access memory at address 0x563c7dc94330。
examines命令检查下级进程中的地址。maint info中的地址是GDB进程本身中的地址。要检查该地址,可以将GDB附加到GDB进程。也就是说,进程层次结构是: GDB (A) debugs GDB (B),它调试您的testalloc进程(C)。在(B)中,您可以发出maint info命令,然后使用(A)检查(B)中的symtab内容。
我建议将(A)和(B)放在不同的终端中,以便更清楚地了解您正在与哪个GDB副本交互。
更新:
我如何导入"struct symtab",我只能检查十六进制格式的内存区域。
通常,开发人员构建一个带有调试信息的gdb版本(这是./configure && make的默认版本),并调试该版本。
在不重新构建整个GDB的情况下“导入”struct symtab的定义是possible,但这会使已经很复杂的调试过程复杂化,所以我不建议这样做。
https://stackoverflow.com/questions/69258071
复制相似问题