我已经使用PAR packager (pp)从Perl脚本foo.exe
创建Windows可执行文件foo.pl
。 Perl脚本运行良好(perl foo.pl <arguments>
)。该可执行文件也可以运行(foo.exe <arguments>
),但不会产生与Perl脚本相同的结果。我想调试可执行文件运行的perl脚本,以找出差异的来源。我怎么做?换句话说,如何将-d
传递给执行perl.exe
时开始的foo.exe
?
附录2020-05-26
使用“ Process Explorer”,我发现最终被执行的应用程序。它是%TEMP%\par-<ID1>\cache-<ID2>\foo.exe
,其中<ID1>
和<ID2>
是长短十六进制字符串。我原本希望找到...\perl.exe foo.pl
,然后将-d
注入命令行。
在该文件夹中运行foo.exe
会产生错误“无法在@INC中找到PAR.pm”。
该文件夹还包含多个* .pm,*。dll(包括perl528.dll)和一些* .pl文件,其中* .pl和* .pm文件的名称均为短十六进制字符串。 * .pl文件之一(该过程的PAR_0环境变量中提到的文件)的内容与foo.pl
相同,并带有以下两行前缀:
package main;
#line 1 "script/foo.pl"
如果我在该文件夹中运行perl -Iinc/lib <ID>.pl
,并且使用<ID>.pl
这个perl脚本的名称,那么它将产生所需的结果,即不会遇到exe所遇到的问题。我希望该文件夹中的perl528.dll和其他dll是组成Perl的位,但不知道如何调用它们。该文件夹中的foo.exe
大小仅为78 kB,因此它所做的工作不亚于让其他位完成工作。