最近,我收到了客户的故障转储文件。我可以将问题跟踪到一个可能包含不正确数据的类,但我只有一个指向该类的void指针,而不是一个真正的指针(void-pointer来自一个window-property,因此它是一个void-pointer) 。 不幸的是,我希望将指针强制转换为的类位于匿名命名空间中,如下所示:
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.
如果Visual Studio 2005只显示指针值,则在监视窗口中使用“ptr”。 如果我使用“(MyClass *)ptr”,调试器会告诉我它无法转换为它。
如何将ptr转换为MyClass指针?
注意:我最终可以使用愚蠢命名的命名空间(比如源文件的名称),然后使用“using namespace”,但我希望有更好的解决方案。
答案 0 :(得分:9)
MSDN中提到了这一点。在Watch窗口中看起来不是一个很好的解决方案(你可以从我猜的列表中获取你的类的装饰名称)。
你的“愚蠢名称命名空间”的想法可以正常工作,你也可以用一个愚蠢的名称声明一个相同的类,然后转换为该类型。
答案 1 :(得分:2)
不支持在Visual Studio Debugger的表达式中引用匿名命名空间(至少从VS 2017开始)并且它真的很烦人。
来自https://docs.microsoft.com/en-us/visualstudio/debugger/expressions-in-the-debugger#c-expressions
不支持匿名命名空间。如果您有以下代码,则无法将测试添加到观察窗口:
A,B,C