本文主要总结我在实际工作遇到的一种程序调试问题——VS调试器未命中断点。我主要谈的是用VS调试C++程序。
一、程序分支
调试程序的时候,最常用的就是设置断点(F9, bp - break point)并执行(F5,go or run)。程序员在预先需要程序执行流停下来的代码行设置断点(F9),然后按F5开始执行程序流,程序执行到断点的代码行会停下来,这个时候,程序员可以通过查看变量、内存、调用堆栈等方式来观察程序执行的情况。
一般来说,上述调试方式中,调试器未命中断点,极大的可能是你设置断点不在程序执行流中,或者说程序执行流走的是其他分支,没有经过你设置断点的分支。这种情况下,你就需要去分析程序的分支逻辑和设置更多的断点来一个个排查。
二、输出目录和工作空间不一致
除了调试exe工程,有时候,我们也需要调试DLL工程,这个时候,我们会将相应的exe文件拷贝到DLL工程的debug目录下,并设置该目录为VS调试器的工作空间,然后设置启动项为exe。通过上述一系列设置,我们就可以开始调试DLL工程代码了。
有时候,我们会发现一个奇怪的现象:在按下F5启动程序之前,我在DLL工程代码中设置了几个断点,并显示了“红色实心圆点”,但是,一当我们按下F5启动程序,之前设置的“红色实心圆点”瞬间变成了“空心圆点”,然后,你会发现你设置的断点未命中。