我艹,这该怎么办,我们一下子就懵逼了。我们选择中断,常常会跳到一个莫名其妙的地方去。
正是这个断言
ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL))
导致中断的发生,ASSERT中的参数只要是false, 就会发生中断。而且中断的地方,基本上都是父类的内部,这就坑爹了,中断把我们带到坑里来了?我们怎么样才能知道,
自己写的代码哪里出现问题呢?
我们知道,C++函数调用是一个压栈和出栈的过程。应用程序维护这一个函数调用堆栈,就像下图这样
通过调用堆栈的栈顶开始,一直向下寻找,就能回溯函数的调用过程。
VS2010查看调用堆栈
VS2010在程序出现上述问题出现的调试中断时,点一下中断,让程序跳到中断处。然后可以
按键盘的 Alt + 7 ,程序会显示调用堆栈。如下图
或者直接点击下面的
调用堆栈
也可以显示该窗口,没有的话可以在菜单中找到
调试 -> 窗口 -> 调用堆栈
就可以显示调用堆栈窗口了。
双击调用堆栈的某一行,可以定位到此次调用的源代码或汇编指令处。
VC调试中断时可以查看调用堆栈定位中断位置。
按 Alt + 7 可以查看调用堆栈
http://bbs.csdn.net/topics/390096855