【问题标题】:Why does the CPU window always appear when trying to debug my project after a rebuild in Delphi 2010?为什么在 Delphi 2010 重建后尝试调试我的项目时总是出现 CPU 窗口?
【发布时间】:2010-05-26 11:54:47
【问题描述】:

每当我重建我的应用程序并尝试进入断点时,CPU 窗口总是会出现。据我了解,当 DCU 与源文件不匹配时,会出现 CPU 窗口,但是,在我的情况下,DCU 肯定会被重新编译,并且周围没有旧的或类似的东西。

这里奇怪的是,如果我关闭应用程序并重新打开项目,放置断点并运行它就可以正常工作。我什至可以修改文件,然后按 F9 运行项目,它工作正常......似乎只有当我重建项目(通过 IDE 项目菜单或项目上下文菜单)时,这个 CPU 窗口才不会进入来源(即使它可以找到它!)。

我还注意到在调用堆栈中一个名为 Generics 的单元始终是堆栈的顶部,而不是我的断点所在的单元,这与我的断点所在的位置没有任何关系。

有什么想法吗?

【问题讨论】:

  • 但是...重建项目(通过 IDE 项目菜单或上下文菜单)不会执行它,它只是构建。执行构建的唯一方法是使用 F9/run。你是说,从一个全新的 Delphi 启动,你可以设置断点,F9/运行,然后进入源代码,但是然后重建(通过菜单),然后按 F9/运行(重新重建然后运行),你的断点闯入 CPU 窗口?

标签: delphi debugging delphi-2010


【解决方案1】:

尝试检查您的 Delphi 事件日志。

有时Windows本身会写一个OutputDebugString,然后当你的应用程序做了一些非常糟糕的事情时触发一个断点,例如:

HEAP[Project1.exe]: HEAP: Free Heap block 32959a8 modified at 32959c0 after it was freed
Windows has triggered a breakpoint in Project1.exe.
This may be due to a corruption of the heap, and indicates a bug in Project1.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information

它也可以是应用程序验证器(如果您正在使用它;如果您不使用它,则应该)告诉您一个问题。

【讨论】:

  • 我还没有听说过应用程序验证器,所以肯定不会使用它。我现在注意到,只有在不编译的情况下构建才会出现问题。
  • 我还是说检查 Delphi 的事件查看器。我了解到,每当 CPU 窗口意外出现时:它是 Windows,Windows 会记录一个 OutputDebugString 说明出了什么问题。
  • 事件查看器是我的解决方案。问题是“在 00571D28 处的 eap 块在 00571D5C 处修改,超过了 2c 的请求大小” - 我使用 C 中内置的 DLL - 问题出在 char * 上 - 我使用 malloc(len),不考虑终止 0。我改变了它到 malloc(len+1) 并且没有更多的 cpu 窗口。谢谢!
【解决方案2】:

Here 我发现建议在 Debugger Options (D2009) 中检查 Ignore non-user breakpoints

【讨论】:

  • @straveu:我试过这个选项仍然不能阻止 CPU 窗口出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
相关资源
最近更新 更多