在C++中调试匿名命名空间中的数据

13

最近,我从一个客户那里收到了一个崩溃转储文件。我可以将问题追踪到一个可能包含不正确数据的类,但我只得到了一个指向这个类的void指针,而不是一个真正的指针(该void指针来自窗口属性,因此它是一个void指针)。 不幸的是,我想要将指针转换为的类在一个匿名命名空间中,就像这样:

namespace
   {
   class MyClass
      {
      ...
      };
   }

...
void *ptr = ...
// I know ptr points to an instance of MyClass,
// and at this location I want to cast ptr to (MyClass *) in the debugger.
当我在监视窗口中使用ptr时,Visual Studio 2005只显示指针值。 如果我使用(MyClass *)ptr,调试器会告诉我无法转换它。
如何将ptr强制转换为MyClass指针?
注意:我最终可以使用一个愚蠢的命名空间(如源文件的名称),然后使用“using namespace”,但我希望有更好的解决方案。

1
顺便说一下,VS 2008也有同样的问题。我建议给微软发一封邮件。 - gimpf
2个回答

9
这在MSDN中提到。在观察窗口中似乎没有一个好的解决方案(我猜你可以从列表中获取你的类的修饰名称)。你的“愚蠢命名空间”的想法还可以,你也可以声明一个具有愚蠢名称的相同类,并将其转换为该类型。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接