找不到 .pas 文件,但有 .dcu,这还不够吗?
.pas file not found but the .dcu is there, is that not enough?
在Delphi7中我在'Tools/Environment options/Library'下我的'Libray path'下面的目录:
C:\ggProgramFiles\QR-synopse-pdf-files
里面有一些 Pas 文件和它们的 Dcu 文件。
这里的文件之一是 QRPDFSynFilt.pas 和 QRPDFSynFilt.dcu
现在我的问题是,由于 pas 文件在那里可用,我总是在调试时进入它们,我发现这很烦人。
所以我创建了一个新目录:
C:\ggProgramFiles\QR-synopse-pdf-files\dcu
并且只复制了那里的 dcu 文件。
然后我更改了 'Tools/Environment options/Library' 中的路径以指向这个新目录。
但是现在 Delphi 7 告诉我他找不到
C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas
这是正确的,只有 dcu 在那里。
但是我始终认为,当Delphi找到DCU文件就足够了,如果找到DCU就不需要PAS文件了。
所以我的问题是 Delphi 是否需要 PAS 文件来编译或者 DCU 是否足够,如果后者是真的,什么会导致 Delphi 给我这个错误?
编辑 Deltics 答案
我可以使用编译器指令 {$debuginfo OFF} 但是因为这些单元是第 3 方我不想编辑它们。
如果没有别的办法,我仍然会这样做。
编辑大卫的评论:
编译器错误是
[Fatal Error] File not found 'C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas'
是的,如果您有 dcu
那么这应该足够了。您的设置中还有其他问题。但是,与其尝试修复该问题并在构建环境中引入并尝试处理复杂性,不如“修复第一个问题”。
不要试图欺骗编译器,只需在您不想调试的任何 pas
文件的顶部添加一个 {$debuginfo OFF}
:
{$debuginfo OFF}
那么无论项目中的编译器设置如何,这些单元都不会使用调试信息进行编译,调试器也不会进入它们。要重新启用调试,您只需在 {
之后的指令中添加一个 .
即可将其转换为注释:
{.$debuginfo OFF} // This is now just a comment, not an active directive
语法高亮会让区别变得清晰(假设你有配置了不同颜色的注释和指令等,恕我直言这是个好主意)。
将此指令放入条件编译指令中可能有意义,这样您就可以启用或禁用对这些特定但相关的单元的调试以及项目条件:
{$ifdef debugQRPDF}
{$debuginfo ON}
{$else}
{$debuginfo OFF}
{$endif}
任何顶部带有此选项的单元都将启用或禁用调试,而不是由项目编译器设置,而是由项目条件。然后,您不必担心试图从编译器 "hide" pas 文件来避免调试它们。
不要忘记,在更改项目设置(例如条件指令)时,需要完全重建才能使这些更改正确反映在构建中。
如果它是第三方组件库并且供应商提供了源代码,您可以打开设计时包并在关闭调试信息的情况下重新编译它。这将创建新的 dcus,调试器不会尝试将其调试到关联的 .pas 文件中。
您将在“项目选项”下找到此设置。转到 Delphi 编译器 -> 编译 -> 调试 -> 调试信息。将设置更改为关闭。
您的项目列表中可能有该文件。这有效地告诉编译器你要编译它。您需要将其从您的项目中删除,但在引用它的每个单元的 uses 子句中保留引用。
在Delphi7中我在'Tools/Environment options/Library'下我的'Libray path'下面的目录:
C:\ggProgramFiles\QR-synopse-pdf-files
里面有一些 Pas 文件和它们的 Dcu 文件。 这里的文件之一是 QRPDFSynFilt.pas 和 QRPDFSynFilt.dcu
现在我的问题是,由于 pas 文件在那里可用,我总是在调试时进入它们,我发现这很烦人。
所以我创建了一个新目录:
C:\ggProgramFiles\QR-synopse-pdf-files\dcu
并且只复制了那里的 dcu 文件。
然后我更改了 'Tools/Environment options/Library' 中的路径以指向这个新目录。
但是现在 Delphi 7 告诉我他找不到
C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas
这是正确的,只有 dcu 在那里。
但是我始终认为,当Delphi找到DCU文件就足够了,如果找到DCU就不需要PAS文件了。
所以我的问题是 Delphi 是否需要 PAS 文件来编译或者 DCU 是否足够,如果后者是真的,什么会导致 Delphi 给我这个错误?
编辑 Deltics 答案
我可以使用编译器指令 {$debuginfo OFF} 但是因为这些单元是第 3 方我不想编辑它们。 如果没有别的办法,我仍然会这样做。
编辑大卫的评论: 编译器错误是
[Fatal Error] File not found 'C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas'
是的,如果您有 dcu
那么这应该足够了。您的设置中还有其他问题。但是,与其尝试修复该问题并在构建环境中引入并尝试处理复杂性,不如“修复第一个问题”。
不要试图欺骗编译器,只需在您不想调试的任何 pas
文件的顶部添加一个 {$debuginfo OFF}
:
{$debuginfo OFF}
那么无论项目中的编译器设置如何,这些单元都不会使用调试信息进行编译,调试器也不会进入它们。要重新启用调试,您只需在 {
之后的指令中添加一个 .
即可将其转换为注释:
{.$debuginfo OFF} // This is now just a comment, not an active directive
语法高亮会让区别变得清晰(假设你有配置了不同颜色的注释和指令等,恕我直言这是个好主意)。
将此指令放入条件编译指令中可能有意义,这样您就可以启用或禁用对这些特定但相关的单元的调试以及项目条件:
{$ifdef debugQRPDF}
{$debuginfo ON}
{$else}
{$debuginfo OFF}
{$endif}
任何顶部带有此选项的单元都将启用或禁用调试,而不是由项目编译器设置,而是由项目条件。然后,您不必担心试图从编译器 "hide" pas 文件来避免调试它们。
不要忘记,在更改项目设置(例如条件指令)时,需要完全重建才能使这些更改正确反映在构建中。
如果它是第三方组件库并且供应商提供了源代码,您可以打开设计时包并在关闭调试信息的情况下重新编译它。这将创建新的 dcus,调试器不会尝试将其调试到关联的 .pas 文件中。 您将在“项目选项”下找到此设置。转到 Delphi 编译器 -> 编译 -> 调试 -> 调试信息。将设置更改为关闭。
您的项目列表中可能有该文件。这有效地告诉编译器你要编译它。您需要将其从您的项目中删除,但在引用它的每个单元的 uses 子句中保留引用。