Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让VS调试器提供派生类商品?_C++_Visual Studio - Fatal编程技术网

C++ 如何让VS调试器提供派生类商品?

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; } }; 问题是,当断言失败时,调试器不会向我显示是哪个派生类导致了问

我正在使用VisualStudio编译一些代码。它使用NVI进行防御性断言-类似这样:

class Base {
    virtual T DoSomething() = 0;
public:
    T DoStuff() {
         auto result = DoSomething();
         assert(check(result));
         return result;
    }
};
问题是,当断言失败时,调试器不会向我显示是哪个派生类导致了问题,而且由于DoSomething()已经返回,因此它不再位于调用堆栈的顶部。我也遇到过一些问题,调试器不会调用虚拟函数,声称它们没有地址,而它们显然必须在vtable中有一个地址才能被调用


如何发现导致此问题的派生类?

获取此信息的一种黑客方法是在所有派生类的
DoSomething
中添加跟踪点,然后查看断言失败时最后一个跟踪点


要添加跟踪点,请添加一个普通断点,右键单击红点并选择“命中时…”。然后将其设置为打印包含当前函数名(以及当前线程,如果相关的话)的信息。

我有很多派生类,因此如果可能的话,我宁愿避免使用这些派生类。