Visual C++构建/调试问题

4
我在使用Visual Studio时遇到了一个奇怪的问题。每当我更改代码并构建时,即使我收到了构建成功的通知(如果有任何错误,则还会显示代码中的错误并且不会构建),可执行文件实际上仍然是先前的构建版本。这让我感到非常恼火和沮丧。
如果我在新行上设置断点,断点将被禁用,并显示以下消息:
“当前不会触发断点。此行未关联可执行代码。可能的原因包括:预处理器指令或编译器/链接器优化。”
如果我在旧代码行上设置断点,它会停止处理但会显示以下消息:
“源与构建模块时不同。您是否希望调试器继续使用它?”
我以前从未遇到过这个问题,源代码位于我的笔记本电脑硬盘上。它会立即保存。唯一解决这个问题的方法是每次手动“清理”整个解决方案,而不是简单地按F5键。

1
到底构建了什么?例如,是对象文件而不是可执行文件吗?如果是这样,请在构建之前和之后检查源代码、对象和可执行文件的时间戳,并告诉我们它们是什么。此外,在进行干净的构建后,它们又是什么? - Troubadour
你能验证一下是否有打开同一个源文件多次吗? - wimh
6个回答

2

感谢大家的建议。我的错误在于我在.cpp文件中定义了类,这会导致链接器进行奇怪的操作(可能是缓存),并链接旧对象。我将文件重命名为.h,现在一切都按预期工作。


0

我一直在寻找解决这个问题的方法,因为我也被卡住了。我的一个同事给了我一个可行的解决方案。是的,它看起来非常愚蠢,但对我来说确实奏效了。

我们的解决方案有很多项目。他告诉我选择我想要进入的项目,并将其设置为启动项目(右键单击项目名称,然后选择“设置为启动项目”)。我绝望了,所以我试了一下。令我惊讶的是,它奏效了。

既然我已经打开了这个窗口,我想分享一下,以防其他人也遇到了同样的问题。


0

也许你的代码没有构建,或者是以你意想不到的方式构建的。

你可以通过在某个地方插入一个#error foobar预处理器指令来检查。如果构建时没有显示错误,那么你就知道出了问题!

但我从未使用过Visual Studio(我只使用Linux),所以无法提供更多帮助。


0

我认为您正在使用另一个项目的源文件(例如:如果您正在使用一个dll,比如my.dll(它是使用一些源文件构建的,比如mycpp.cpp);在您当前的项目中)。

当您调试文件(mycpp.cpp)时,可能已经对其进行了修改。

因此,您需要首先在创建my.dll的项目中重新构建dll(my.dll)。

或者,您可能已经在一个窗口中打开了mycpp.cpp的实例,并在另一个窗口中进行调试。您应该重新构建dll。

如果您没有使用来自另一个项目的文件,则我无法猜测原因...但我仍然建议使用重建而不是清理构建

请澄清您的问题。

@David期待您的回复...


0
可能是你设置了主项目为其他项目并正在构建它。 通过在菜单栏中设置主项目,将你想要工作的项目设置为“主项目”。

0

我遇到了同样的问题。但原因不是你所说的那样。 然后我只是重新启动了Visual Studio,它就按预期运行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接