小编Gar*_* Hu的帖子

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

从这个链接 gdb解释内存地址作为对象, 我们知道,如果类类型A的对象在特定地址(如0x6cf010),那么我们可以使用:

(gdb) p *(A *) 0x6cf010 
Run Code Online (Sandbox Code Playgroud)

打印此对象的成员元素.

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

(gdb) p *(A::B *) 0x6cf010
(gdb) p *((A::B *) 0x6cf010)
Run Code Online (Sandbox Code Playgroud)

那么,谁知道如何在这种条件下打印对象元素?


我们可以使用以下有意的核心代码来尝试从地址打印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;
Run Code Online (Sandbox Code Playgroud)

}

c++ linux gdb

15
推荐指数
2
解决办法
5万
查看次数

标签 统计

c++ ×1

gdb ×1

linux ×1