“一个或多个断点无法设置且已被禁用。执行将在程序开始处停止。”

Posted

技术标签:

【中文标题】“一个或多个断点无法设置且已被禁用。执行将在程序开始处停止。”【英文标题】:"One or more breakpoints cannot be set and have been disabled. Execution will stop at the beginning of the program." 【发布时间】:2010-05-07 11:02:11 【问题描述】:

我在 Visual-C++ 中的代码中设置了断点,但是当我运行时,我看到了标题中提到的错误。

我知道这个问题之前在 Stack Overflow (Breakpoints cannot be set and have been disabled) 上被问过,但那里的答案都没有完全解释我看到的问题。我能看到的最接近的是关于链接器的东西,但我不明白 - 所以如果有人能更详细地解释一下,那就太好了。

就我而言,我有 2 个 Visual C++ 项目 - 生产 dsw 和测试代码 dsw。我已经在调试模式下加载并重建了两个 dsws。我想在生产代码中设置一个断点,通过测试脚本运行。我的问题是我在运行测试代码时收到错误消息,因为断点在生产代码中,测试开始时没有加载。

在测试脚本的开头附近有一个 mytest_initialize() 命令。我想这会关闭并加载生产 dll。一旦执行了这一行,我就可以在我的生产代码中放置断点并运行直到我遇到它。但是每次我想运行测试时都必须跑到这一行,设置断点并继续,这很烦人。

所以我认为问题在于 Visual C++ 没有意识到这两个项目是相关的。这是链接器问题吗?链接器的作用是什么?我应该更改哪些设置才能使其正常工作?

提前致谢。抱歉,如果我应该将此问题附加到现有问题中,这是我的第一篇文章,所以不太确定这应该如何工作。

[更新 1] 我认为 Chris O 已经发现了问题。如果我能够弄清楚如何使用项目设置来完成这项工作,我将添加进一步的更新。

【问题讨论】:

您是否在某些(自动)生成的代码中设置了断点,该代码已更改,但 VS 仍尝试将断点放置在该位置或尽可能近的位置? 【参考方案1】:

听起来您使用的是 VC6,因为您提到了 dsw 文件。我认为这与 VC6 中的一样好,您必须在从 LoadLibrary 加载模块后手动添加断点。实际上,可能有一个项目调试设置,因此您可以在调试项目时指定要加载的 DLL,这将使您的断点在按下 F5 时保持启用。

您也可以在知道 mytest_initialize() 已被调用后尝试附加调试器,这可能会使您的断点保持启用状态。

【讨论】:

你说得对,我正在运行 VC6。我还应该澄清我直接从 VC6 运行测试脚本,所以我猜调试器会立即附加。我在 Project Settings->Debug 对话框中进行了快速挖掘。看来我应该可以在这里解决这个问题。如果我在左侧窗口中选择我的测试项目,我就可以在 Category: Additional DLLs 下添加生产 DLL。不幸的是,这没有任何区别!我会多尝试一下 - 看起来这应该是解决问题的一种方法。【参考方案2】:

我有时会遇到这个问题,但总是通过一些代码替换操作来解决这个问题。

Here 是一些人的帖子,他是如何修复它的。

希望对你有帮助。

【讨论】:

【参考方案3】:

在我的情况下,我通过将包含断点的 DLL 项目设置为活动项目并更改此项目的调试设置(右键单击项目>>设置>>调试选项卡)来指向实际运行和访问的项目来解决此问题DLL。 “调试会话的可执行文件:”和“工作目录:”应设置为您实际要运行的可执行文件及其对应目录。

希望对您有所帮助。

【讨论】:

【参考方案4】:

右键单击项目>>设置>>链接选项卡 检查生成调试信息 逐步检查链接

【讨论】:

以上是关于“一个或多个断点无法设置且已被禁用。执行将在程序开始处停止。”的主要内容,如果未能解决你的问题,请参考以下文章