单步执行代码时重复上一行

Previous line repeat while stepping through code execution

本文关键字:一行 执行 代码 单步      更新时间:2023-10-16

在逐步执行代码时,我注意到当遇到实例化新类时,代码会后退一行,从而执行两次。 这是两行。

ST_GalacticObject GO = GalacticObjects->Item [FIndex];
delete F; F = new ST_Facility (GO);

注意: GalacticObjects和称为FacilityClasses的相关对象(同一文件(都被定义为extern。

在创建和销毁对象时,生成的代码有许多隐藏位。

编译器在创建此代码时为其分配了一些行号。执行代码时,调试器会突出显示该行。

一种常见情况是调试器返回到运行析构函数时声明对象的行。

对于优化的代码,情况会变得更糟,因为您的代码不一定按顺序执行,您甚至可能会看到在评估每行的不同部分时多次执行行。

您只需要相信编译器已经做了正确的事情并生成了正确的代码,而忽略调试器告诉您正在发生的事情。

这些类型在调试优化(零售(代码时很常见。

但是,为了使调试器不混淆,您可以做出的最明显的改进是不要将两个语句放在同一行上。 也就是说,取而代之的是:

delete F; F = new ST_Facility (GO);

这:

delete F; 
F = new ST_Facility (GO);

较新的编译器引入了用于生成更好(和更大(调试符号的选项,这些符号试图使单步执行过程对于优化的代码更加理智。 如果您使用的是Visual Studio,则可以浏览/Zo选项(以前称为/d2Zi+选项(。 详细信息在这里和这里。

但是,如果所有这些都是您自己的代码,只需切换到"调试"和/或"非优化"构建即可。 让生活更轻松。