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
  • 相关阅读:
    python list添加元素的几种方法
    Python ---- list和dict遍历
    python 之 collections
    python list 中元素的统计与排序
    pandas dataframe 读取 xlsx 文件
    Python 缓存机制与 functools.lru_cache(zz)
    pip 使用
    python 中的异常处理
    python 时间日期处理
    python read txt file
  • 原文地址:https://www.cnblogs.com/smallpi/p/7190488.html
Copyright © 2011-2022 走看看