找不到.pas文件,但.dcu在那里,这还不够吗?

时间:2016-09-29 18:37:06

标签: delphi delphi-7

在Delphi 7中,我在'Libray path'下的'Tools / Environment options / Library'中有以下目录:

C:\ggProgramFiles\QR-synopse-pdf-files

在那里我有一些Pas文件和他们的Dcu文件。 其中一个文件是QRPDFSynFilt.pas和QRPDFSynFilt.dcu

现在我的问题是,由于pas文件可用,我总是在调试时插入它们,我觉得很烦人。
所以我创建了一个新目录:

C:\ggProgramFiles\QR-synopse-pdf-files\dcu  

并在那里仅复制了dcu文件 然后我改变了“工具/环境选项/库”中的路径以指向这个新目录 但现在Delphi 7告诉我他找不到

C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas

这是正确的,只有dcu在那里 但我一直认为,当Delphi找到足够的DCU文件时,如果找到DCU则不需要PAS文件。

所以我的问题是Delphi是否需要PAS文件进行编译,或者DCU是否足够,如果后者是真的,可能导致Delphi给我这个错误?

编辑Deltic回答

我可以使用编译器指令{$ debuginfo OFF},但由于这些单位是第3方,我不想编辑它们。 如果没有别的办法,我仍然会这样做。

关于戴维斯的编辑评论: 编译错误是

[Fatal Error] File not found 'C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas'

3 个答案:

答案 0 :(得分:5)

是的,如果你有dcu那么这应该就足够了。您的设置还有其他问题。但是,我不是试图解决这个问题,而是在构建环境中引入并尝试处理复杂性,而是“修复第一个问题”。

不要试图欺骗编译器,只需在您永远不想调试的任何{$debuginfo OFF}文件的顶部添加pas

{$debuginfo OFF}

然后,无论项目中的编译器设置如何,这些单元都不会使用调试信息进行编译,调试器也不会进入它们。要重新启用调试,您只需在.之后向指令添加{即可将其转换为注释:

{.$debuginfo OFF}    // This is now just a comment, not an active directive

语法高亮显示会明确区别(假设你有不同颜色配置的注释和指令等,无论如何这都是个好主意。)

将此指令放在条件编译指令中可能是有意义的,这样您就可以使用条件项启用或禁用这些特定但相关单元的调试:

{$ifdef debugQRPDF}
  {$debuginfo ON}
{$else}
  {$debuginfo OFF}
{$endif}

任何位于顶部的单元都将启用或禁用调试,而不是项目编译器设置,而是项目条件。然后,您不必担心尝试从编译器中“隐藏”pas文件,以避免调试它们。

不要忘记在更改项目设置(例如条件指令)时,需要进行全面重建才能在构建中正确反映这些更改。

答案 1 :(得分:4)

您可能在项目列表中有该文件。这有效地告诉编译器您要编译它。您需要将其从项目中删除,但将引用保留在引用它的每个单元的uses子句中。

答案 2 :(得分:2)

如果它是第三方组件库且供应商提供了源,您可以打开设计时包并在关闭调试信息的情况下重新编译它。这将创建新的dcus,调试器不会尝试调试到相关的.pas文件。 您将在“项目选项”下找到此设置。转到Delphi编译器 - >编译 - >调试 - >调试信息。将设置更改为OFF。