2011-03-21 121 views
12

我正在调查基于可用核心转储的崩溃。应用程序崩溃是一个C++程序,由gcc构建并在RH5上运行。回溯似乎有效,直到#1帧。在那里试图打印一个对象我得到 <invalid address>, <error reading variable> 由于我有来自#2帧的对象的地址是一个有效的推测,我可以以某种方式'转储'对象分配的内存,仍然收集一些信息。此外,不要试图猜测对象如何对齐,我可以强制gdb将地址打印为对象,即使它检测到一些错误。我的想法是,也许对象已被删除,但也许内存仍然存在,我可以打印一些成员变量。gdb将内存地址解释为对象

请评论是否有可能,如果是这样,它应该如何在gdb中完成。 10X。

+3

不知道它会工作,但你可以尝试'打印*((*的OBJ)地址)'。它有时对我有用。 – JaredC 2011-03-21 18:26:37

回答

18

好吧,如果你有一个地址,你总是可以做:如果

print *(class MyClass*)pointer_var

+0

嗯,我试着打印这种方式 '(GDB)P(MyClass类*)m_pointer' 但我得到 '没有名为MyClass' 结构类型,它看起来像GDB不知道我的班。 – 2011-03-22 14:02:45

+0

@Yordan你当然需要投射到你想要打印的结构。 – 2011-03-22 14:04:13

+0

@Let_Me_Be你是什么意思?不是'(类MyClass *)'部件的作用。 – 2011-03-22 14:09:08