gpt4 book ai didi

c++ - 如果对象的类类型类似于 A::B,如何使用 GDB 从地址打印 c++ 对象成员

转载 作者:IT老高 更新时间:2023-10-28 22:25:40 28 4
gpt4 key购买 nike

从此链接 gdb interpret memory address as an object我们知道,如果类类型 A 的对象位于特定地址,例如 0x6cf010,那么我们可以使用:

(gdb) p *(A *) 0x6cf010 

打印此对象的成员元素。

但是,当涉及 c++ 命名空间时,这似乎不起作用。也就是说,如果类类型为 A::B 的对象,那么下面的所有尝试都不起作用:

(gdb) p *(A::B *) 0x6cf010
(gdb) p *((A::B *) 0x6cf010)

那么,谁知道在这种情况下如何打印对象元素呢?


我们可以使用以下经过深思熟虑的核心代码尝试从地址打印 p 的成员(我们可以使用“info locals”来显示地址)。

#include <stdio.h>

namespace A
{
class B
{
public:
B(int a) : m_a(a) {}

void print()
{
printf("m_a is %d\n", m_a);
}

private:
int m_a;
};
}

int main()
{
A::B *p = new A::B(100);

p->print();

int *q = 0;

// Generating a core here
*q = 0;
return 0;

}

最佳答案

我知道这被标记为已回答,但我能够在 OS X (GNU gdb 6.3.50-20050815(Apple 版本 gdb-1820)上使用 gdb 重现此问题)(6 月 16 日星期六 02:40 :11 UTC 2012)) 并且为我工作的解决方案没有为我回答。

原来关于 SO 的另一个问题确实有一个有效的答案,所以我认为值得提出这个问题:

Why gdb casting is not working?

简短的回答是您可能必须用单引号引用命名空间变量:

(gdb) p ('MyScope::MyClass'*) ptr;

关于c++ - 如果对象的类类型类似于 A::B,如何使用 GDB 从地址打印 c++ 对象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380027/

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