zoukankan      html  css  js  c++  java
  • VC调试篇:ASSERT(FALSE)时怎么办?查看调用堆栈

    问题简述

    我们在调试程序时,经常会遇到程序中断的情况,就像下图这样。

    程序调试中断

    我艹,这该怎么办,我们一下子就懵逼了。我们选择中断,常常会跳到一个莫名其妙的地方去。

    发生中断的地方

    正是这个断言 ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)) 导致中断的发生,ASSERT中的参数只要是false, 就会发生中断。而且中断的地方,基本上都是父类的内部,这就坑爹了,中断把我们带到坑里来了?我们怎么样才能知道,自己写的代码哪里出现问题呢?

    调试方法

    我们知道,C++函数调用是一个压栈和出栈的过程。应用程序维护这一个函数调用堆栈,就像下图这样

    C++函数调用堆栈

    通过调用堆栈的栈顶开始,一直向下寻找,就能回溯函数的调用过程。

    VS2010查看调用堆栈

    VS2010在程序出现上述问题出现的调试中断时,点一下中断,让程序跳到中断处。然后可以

    1. 按键盘的 Alt + 7 ,程序会显示调用堆栈。如下图

    调用堆栈

    1. 或者直接点击下面的 调用堆栈 也可以显示该窗口,没有的话可以在菜单中找到 调试 -> 窗口 -> 调用堆栈 就可以显示调用堆栈窗口了。

    双击调用堆栈的某一行,可以定位到此次调用的源代码或汇编指令处。

    总结

    1. VC调试中断时可以查看调用堆栈定位中断位置。
    2. 按 Alt + 7 可以查看调用堆栈

    参考

    1. http://bbs.csdn.net/topics/390096855
  • 相关阅读:
    外观模式
    享元模式
    c#中的抽象类和接口
    装饰者模式
    组合模式
    适配器模式
    springboot 源码篇002## web层自动装配部分源码
    springboot 源码篇002## 自动装配原理
    springboot 源码篇 01
    shell 脚本基础 第二篇
  • 原文地址:https://www.cnblogs.com/smallpi/p/7190488.html
Copyright © 2011-2022 走看看