我偶然发现了一个非常有趣的问题,我的应用程序中的一个函数(必须处理 Windows 剪贴板)只有在函数内部遇到断点时才能正常工作。这让我想知道,当遇到断点时,调试器(VS2008、C++)到底做了什么?
最佳答案
在不直接回答你的问题的情况下(因为我怀疑调试器的内部工作可能不是真正的问题),我将提供我以前见过的两个可能发生的原因:
首先,您的程序在遇到断点时确实会暂停,而且通常这种延迟足以让某些事情(可能在另一个线程或另一个进程中)发生,而这些事情在您的函数运行之前必须发生。验证这一点的一种简单方法是预先添加几秒钟的暂停并正常运行程序。如果可行,您将不得不寻找更可靠的方法来查找问题。
其次,Visual Studio 在 Debug模式下运行时曾经(我不确定 2008 年)过度分配内存。因此,例如,如果您分配了一个 int[10]
数组,根据权利,它应该获得 40 个字节的内存,但 Visual Studio 可能会给它 44 个或更多,以防万一有越界错误。当然,如果您确实遇到了越界错误,这种过度分配可能会使它看起来无论如何都在工作。
关于c++ - 调试器到底做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288489/