在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'
答案 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。