最近,我从客户那里得到了一个崩溃转储文件.我可以将问题跟踪到一个可能包含不正确数据的类,但我只有一个指向该类的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.
Run Code Online (Sandbox Code Playgroud)
如果Visual Studio 2005只显示指针值,则在监视窗口中使用"ptr".如果我使用"(MyClass*)ptr",调试器会告诉我它无法转换为它.
如何将ptr转换为MyClass指针?
注意:我最终可能会使用一个愚蠢命名的命名空间(比如源文件的名称),然后使用"using namespace",但我希望有更好的解决方案.
在我的代码库中,有一些在匿名命名空间中定义的回调函数。我正在 gdb 中调试,我想使用函数名在函数中设置断点。我还尝试使用 filename : linenum 放置断点,但是如果文件已经加载,这通常会起作用,否则它会说“找不到源文件”在将来的共享库加载时使断点挂起?(y 或 [n]) n
因此,解决方法是,一旦调试器位于同一个文件中,我就可以使用 filename : line number 设置断点
但是有没有其他方法可以在匿名命名空间内设置断点?
相关的stackoverflow 问题: 如何在Visual Studio 中的匿名命名空间内按函数名称设置断点?
但这并不能解决这里的问题。
根据stackoverflow中的一些帖子,
命名空间 { int function_name(int a, int b) { return a+b; } }
“未找到源文件”/root/workspace/ProtocolInterface.cpp。在未来的共享库加载时使断点挂起?(y 或 [n]) y
即使断点挂起,它也不会在提到的函数处中断。