如何让VS调试器咳出派生类商品?

时间:2014-05-22 21:49:54

标签: c++ visual-studio

我正在使用Visual Studio编译一些代码。它使用NVI来防御性断言:

class Base {
    virtual T DoSomething() = 0;
public:
    T DoStuff() {
         auto result = DoSomething();
         assert(check(result));
         return result;
    }
};

问题是当断言失败时,调试器不会告诉我哪个派生类导致了问题,并且由于DoSomething()已经返回,因此它不再位于调用堆栈之上。我也有一些问题,调试器不会调用虚函数,声称他们没有地址,当他们显然必须在vtable中有一个地址被调用。

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

1 个答案:

答案 0 :(得分:1)

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

要添加跟踪点,请添加正常断点,右键单击红点并选择"何时命中..."。然后将其设置为打印包含当前函数名称的信息(如果相关,则可能包含当前线程)。