C++ 如何让VS调试器提供派生类商品?
我正在使用VisualStudio编译一些代码。它使用NVI进行防御性断言-类似这样:C++ 如何让VS调试器提供派生类商品?,c++,visual-studio,C++,Visual Studio,我正在使用VisualStudio编译一些代码。它使用NVI进行防御性断言-类似这样: class Base { virtual T DoSomething() = 0; public: T DoStuff() { auto result = DoSomething(); assert(check(result)); return result; } }; 问题是,当断言失败时,调试器不会向我显示是哪个派生类导致了问
class Base {
virtual T DoSomething() = 0;
public:
T DoStuff() {
auto result = DoSomething();
assert(check(result));
return result;
}
};
问题是,当断言失败时,调试器不会向我显示是哪个派生类导致了问题,而且由于DoSomething()已经返回,因此它不再位于调用堆栈的顶部。我也遇到过一些问题,调试器不会调用虚拟函数,声称它们没有地址,而它们显然必须在vtable中有一个地址才能被调用
如何发现导致此问题的派生类?获取此信息的一种黑客方法是在所有派生类的
DoSomething
中添加跟踪点,然后查看断言失败时最后一个跟踪点
要添加跟踪点,请添加一个普通断点,右键单击红点并选择“命中时…”。然后将其设置为打印包含当前函数名(以及当前线程,如果相关的话)的信息。我有很多派生类,因此如果可能的话,我宁愿避免使用这些派生类。