有没有办法在不包含系统单元的情况下启用调试DCU?

Jer*_*ers 11 delphi

在Delphi中使用调试DCU非常好,除了系统单元在方法初始化/清理(释放接口,清除数组,行走异常帧等)方面增加了很多开销.

有没有办法用调试DCU运行Delphi,但没有系统单元?

Dav*_*nan 21

启用调试DCU时,您所做的只是更改DCU搜索路径.特别是在搜索.dcu文件时使用Debug DCU Path选项指定的路径.

因此,您可以创建一个新目录并将其添加到"调试DCU路径"选项中的路径列表的前面.在该目录中放置不包含调试符号的标准System.dcu.


Jer*_*ers 7

  1. 备用 ...\Embarcadero\RAD Studio\10.0\lib\win32\debug\System.dcu
  2. 复制...\Embarcadero\RAD Studio\10.0\lib\win32\release\System.dcu...\Embarcadero\RAD Studio\10.0\lib\win32\debug\System.dcu
  3. 在将修补程序或更新应用于Delphi之前,请恢复原始System.dcu文件.

重复其他平台:win32根据您运行的Delphi版本替换其中任何一个平台.

  • android
  • iosDevice
  • iossimulator
  • osx32
  • win64

编辑2:

重复其他支持的语言而不是英语:替换debugrelease使用debug\##和使用您要使用的release\##每种语言##.

目前支持的语言我知道:

  • de (德语)
  • fr (法文)
  • jp (日本)

编辑:

这种方式运行良好,即使安装顺序混淆了您在Delphi XE/XE2时代不止一次发生过的搜索路径.

它适用于平台releasedebug分支机构中的任何单元.

编辑3:

如果您的Delphi版本没有遭受库路径覆盖,那么您可以使用Davids建议执行以下步骤:

  1. $(BDSLIB)\$(Platform)\nodebug;$(BDSLIB)\$(Platform)\debug\$(LANGDIR);Delphi Debug DCU Path 一样添加路径.
  2. 将您不想调试的任何英语单元复制$(BDSLIB)\$(Platform)\release$(BDSLIB)\$(Platform)\nodebug所有上述平台.
  3. 将您不想调试的任何非英语语言单元复制$(BDSLIB)\$(Platform)\release\$(LANGDIR);$(BDSLIB)\$(Platform)\nodebug\$(LANGDIR);所有上述平台.

这些nodebug目录不一定是在这个$(BDSLIB)领域,但是保持这个目录非常方便,$(Platform)因为它更容易支持其他平台Win32.

我已经在所有支持的平台上使用Delphi XE3和XE5进行了测试,并且它可以工作.在XE和XE2中,我有时会用错误的值覆盖搜索路径的某些部分,因此我更喜欢第一种方法.

下图是针对Delphi XE3和OSX的.

它支持英语调试DCU翻译后的调试DCUS.

在此输入图像描述

  • 由于您要发布QA样式文章,因此您可以将其概括为要从"Trace In"命令中排除的任何单元.例如,在System和SysInit中不使用调试信息将从调试会话的最开始启用单步执行,而不是冗长的RTL init. (3认同)
  • 这似乎是一件非常脆弱的事情.尤其是因为IDE提供了第一类方法来完成您想要的操作而不会弄乱安装. (2认同)