问题简述 我们在调试程序时,经常会遇到程序中断的情况,就像下图这样. 我艹,这该怎么办,我们一下子就懵逼了.我们选择中断,常常会跳到一个莫名其妙的地方去. 正是这个断言 ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)) 导致中断的发生,ASSERT中的参数只要是false, 就会发生中断.而且中断的地方,基本上都是父类的内部,这就坑爹了,中断把我们带到坑里来了?我们怎么样才能知道,自己写的代码哪里出现问题呢? 调试方法 我们知道,C++函数调…
难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件. 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC调试篇 设置为了调试一个程序,首先必须使程序中包含调试信息.一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信…
        无论是分析程序崩溃原因,还是解决程序hang问题,我们最常查看的就是程序调用堆栈.学会windbg调用堆栈命令,以及理解堆栈中的各个参数的意义就显得至关重要. 上图就是一个典型的Windbg堆栈,如果不理解ChildEBP.RetAddr.Args to Child等参数意义,以及它们之间的来龙去脉,调试工作将很难进行下去. 1. 函数参数         函数的参数传递有二种方式:堆栈方式.寄存器方式.如果是堆栈方式传递的,就需要定义参数在堆栈中的传递顺序,并约定函数被调用之后…
问题简述 我在Win7下写的MFC程序,想让它在winXP下运行.一般情况下,如果所有的依赖库都可以在XP下运行的话,那么在XP下运行时没问题的.但是,结果却... 本来程序在win7下运行得好好的,又没有依赖win7的库,为什么会报错呢? 怎么样在win7下提早发现这些运行时错误? 调试方法 通过询问度娘,认为出现上述情况的原因可能有以下几种: 数组的访问越界. 程序中的野指针 (指针没有初始化就使用,指针为空等) 我最后发现程序中使用了未初始化的指针.这个野指针在win7下竟然能运行!能运行…
目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是在IntelliJ IDEA中单步跟踪调试HashMap的put(K key, V value)方法,不曾想执行到断点处时,单步调试(Step Into)无法进入到HashMap的put(K key, V value)方法内部,而是直接跳过了,效果跟Step Over是一样的. 已经确认不是快捷键冲…
msdn 如何使用call stack窗口: http://msdn.microsoft.com/zh-cn/library/a3694ts5(v=vs.90).aspx 使用“调用堆栈”窗口可以查看当前堆栈上的函数或过程调用. “调用堆栈”窗口显示每个函数的名称和编写它所用的编程语言.函数或过程名可能伴随有可选信息,如模块名.行号.字节偏移量以及参数的名称.类型和值. 可以打开或关闭这些可选信息的显示. 一个黄色箭头标识执行指针当前所位于的堆栈帧. 默认情况下,该帧的信息显示在源.“反汇编”.…
Eclipse调试DEBUG时快速查看某个变量的值的快捷键 Ctrl + Shift + i…
有时,当您调试应用程序时,会碰巧得到指向类的指针,该类只有几个成员变量,包括结构和其他类对象!如何看待内部类/结构变量成员的值??所以,这是提示.下面是用于演示命令的代码. struct testStruct { int i; char ch; long l; char* str; }; class myClass2 { public: myClass2(); ~myClass2(); testStruct structObj; }; myClass2::myClass2() { //Do No…
其实这篇文章说的很明白了:http://dev.gameres.com/Program/Other/DebugMacro.htm 结论如下: 1.ASSERT()测试它的参数,若参数为0,则中断执行并打印一段说明消息:非0什么事儿都不做.在 Release 版本的程序中它不起任何作用.    2.VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效,但只计算参数值,不输出诊断信息.    ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:A…
调试技术与异常(错误)处理 (1)   转载自 52PK游戏论坛 跟踪与中间过程输出 也许一个开发人员一半以上的时间都是在面对错误,所以好的调试/查错方法(工具)会减轻我们工作的负担,也可以让枯燥的DEBUG过程得以缩短. VC开 发环境所提供的调试环境是很优秀的,我们可以运用单步运行,设置断点的方法来查找问题所在.但是这种跟踪是非常耗时的,所以我们需要采用一些策略来让我们 更容易的发现错误并对错误进行定位,所幸的是VC在这方面提供了强大的支持.在本节中我们先看看如何利用设置断点和利用TRACE…