我正在使用visual studio c ++ 2013 express版调试c ++应用程序,而我的调试器在程序的某个区域中不规律地跳过代码行。这是一些背景信息。以及我正在观察的行为
以下是我试图解决的问题
我对任何人都可以为这种情况提出的任何一般性建议感兴趣。我已经和同一个项目工作了很长时间,我从来没有遇到过这个问题。在我做了一个全新的项目后,我感到非常惊讶,我想知道是什么原因造成的。
编辑:仅供参考,我的应用程序根本没什么特别的。我不包括任何标准的外部库。没有多个线程或自定义生成设置。当你制作一个新的,空的,香草的视觉工作室项目时,相对于默认设置,一切都非常标准。
答案 0 :(得分:1)
问题还可能是混合线路结尾造成的。看看here。 切勿在源文件中混合使用不同的行结尾(Linux样式:LF'\ n',Mac OS到版本9:CR'\ r',Windows:CRLF'\ r \ n')。将代码从其他地方复制/粘贴到源文件时要小心。
转到Visual Studio中的“高级保存选项”,然后选择行结尾并保存文件。
答案 1 :(得分:0)
您的信息听起来像是2个问题之一:源列表与调试信息或优化副作用之间的同步问题。
我认为这不是同步问题,因为您删除了所有临时文件并重新启动。
编译器有可能执行了一些严重的优化,导致可执行文件与列表不匹配。
以下是一些例子。
删除空函数 编译器和链接器开发人员最喜欢的是删除没有内容或未使用的函数。这会对符号调试器造成严重破坏,因为源代码表明函数存在,但编译器/链接器将其删除。
编译器创建了公共代码
编译器可能在函数之间考虑了公共代码。包含公共指令的新函数通常放在模块的末尾。这会使调试器混淆,因为新代码没有匹配的行号,或者有多个行号引用新代码。
编译器会重写您的代码
我已经发生了这种情况。汇编语言列表显示源代码没有汇编代码,因为编译器决定重写代码。内联就是一个很好的例子。我有一个简单的5次迭代循环,编译器用5个循环内容副本替换了for
循环。与源代码列表不匹配,因此调试器很困惑。
汇编列表中的真相
事实是在集会清单中。如果您发布函数的汇编语言或汇编语言和C ++语言的交织列表,我们可以为您提供有关调试器跳转原因的更好详细信息。