我有一个多线程应用程序,我正在IDE中调试(Visual Studio 2008,Win7-64,C ++)。
出于“调试”的目的,我“假装”我总是有一个处理器(程序检测本地处理器的数量),但程序设计建立了两个线程的最小(例如,处理GUI和事件流量的“主线程”,以及工作从“主线程”移出的第二个“处理”线程。 (在“生产”版本中,将有一个主线程,以及一个或多个“处理”线程,具体取决于检测到的处理器数量。)
问题:代码中的断点(在IDE中)有时会被触发,有时不会被触发。重新运行程序可能会“捕获”上一次运行它没有“捕获”的断点(没有源代码更改或重建执行以查看此更改断点捕获行为,程序执行路径为相同的)。
(我主要只关心在非GUI /非主线程中触发断点,但我认为这不重要。)
问题: 有没有办法让这些断点更“可靠”? (什么影响断点是否“抓住”?)
我知道,并不关心以下事项:
在网络搜索中,提到可能将编译器设置设置为“x86
”而不是“Any Processor
”来捕获断点,不确定为什么这可能很重要??
最后,是的,当然,所有逻辑“应该”在单线程应用程序中进行测试(例如,重新确定单元和回归测试的确定性单线程执行因素)。但是,对于当前的测试,我需要进入“真正的”应用程序(想想“集成测试”或“系统集成”)。
答案 0 :(得分:1)
通常打破非常可靠。以下是一些尝试:
答案 1 :(得分:1)
我将同意VoidStar和其他评论。我曾经使用VC6,VS2005,VS2008和VS2010,我已经调试了相当复杂的多线程应用程序,断点对我来说一直都很可靠。
一度例外。对于使用DLL的项目,有时在DLL中的代码中设置的断点不起作用。这不是因为VS错过了断点,而是因为调试器无法将该行代码映射到编译代码中的实际位置,可能是因为pdb文件由于某种原因无法加载。当发生这种情况时,您会在断点线的左边缘看到一个空心的红色圆圈,而不是完整的红色球。这可能是你的问题吗?
我还没弄清楚为什么有时会发生这种情况,但根据我的经验,它只发生在不是正在调试的主要项目的模块中的断点。我使用的解决方法是从DLL启动调试器,将exe放在DLL项目的启动调试配置中。有时帮助的另一个技巧是将所有项目都放在一个解决方案中,并使用正确的引用设置所有项目,这样只需一次编译就可以重建整个项目。
祝你好运,我希望这会有所帮助。