gpt4 book ai didi

c - GDB 位位置位值

转载 作者:行者123 更新时间:2023-12-01 03:32:27 25 4
gpt4 key购买 nike

我正在尝试使用 GDB 中的 ARM .elf 输出来确定地址值和大小。使用通常的 p& 和 print 函数,我可以确定大部分地址和变量大小,但我无法确定该变量是否为 bitValue。

举个例子:

typedef struct
{
bool_t start;
bool_t running :1;
bool_t objectpoolUsable :1;
bool_t ready :1;
bool_t test :1;
bool_t stop :1;
uint8_t defaultMachine;
}bitFieldTest;

bitFieldTest bitValues;

当向 GDB 询问“bitValues.ready”或“bitValues.running”的地址时,它将返回相同的地址(因为它使用相同的地址),但不会给我位位置。我也不知道它是否真的是位值或只是占用 uint8_t 空间的 bool 值。

澄清我需要做什么:只给 GDB 一个名字,可能是一个 bitValue,然后返回给我正确的地址和类型。如果这个类型是一个 bitValue,我需要找到位的位置。对于非 bitValues 这工作正常,bitValues 现在造成了麻烦。

GDB 是否能够提供某种输出来解决这个问题?

最佳答案

无法使用 gdb 表达式 API 直接获取此信息。这并没有真正深刻的原因——当然 gdb 知道位的位置——但这是 gdb 表达式模仿正在调试的语言这一事实​​的结果,再加上没有人愿意公开它。由于我以前从未听说过有人想要这个,我认为可以肯定地说这是一个罕见的请求。

信息可通过 gdb 的 Python API 获得。特别是,如果您遍历一个类型的字段,Field 对象将有一个 bitpos 成员,该成员具有数据的位偏移量。请注意,偏移量是从封闭的 struct 开始的。

用 Python 编写一条打印此信息的新命令将是一件相对简单的事情。

关于c - GDB 位位置位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305306/

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