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