如何调试使用Perl PAR包装机(PP)创建的可执行文件?
我使用了从Perl脚本如何调试使用Perl PAR包装机(PP)创建的可执行文件?,perl,debugging,pp-perl-par-packager,Perl,Debugging,Pp Perl Par Packager,我使用了从Perl脚本foo.pl创建Windows可执行文件foo.exe。Perl脚本运行良好(Perl foo.pl)。可执行文件也会运行(foo.exe),但不会产生与Perl脚本相同的结果。我想调试由可执行文件运行的perl脚本,以找出差异的来源。我该怎么做?换句话说,如何将-d传递给执行foo.exe时启动的perl.exe 附录2020-05-26 使用“Process Explorer”,我找到了最终执行的应用程序。它是%TEMP%\par-\cache-\foo.exe,其中和
foo.pl
创建Windows可执行文件foo.exe
。Perl脚本运行良好(Perl foo.pl
)。可执行文件也会运行(foo.exe
),但不会产生与Perl脚本相同的结果。我想调试由可执行文件运行的perl脚本,以找出差异的来源。我该怎么做?换句话说,如何将-d
传递给执行foo.exe
时启动的perl.exe
附录2020-05-26
使用“Process Explorer”,我找到了最终执行的应用程序。它是%TEMP%\par-\cache-\foo.exe
,其中
和
是短的和长的十六进制字符串。我本来希望找到…\perl.exe foo.pl
,然后我可以将-d
注入命令行
在该文件夹中运行<代码> Fo.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.pl
,并使用该perl脚本的名称.pl
,那么它将生成所需的结果,即不会遇到exe遇到的问题。我希望perl528.dll和该文件夹中的其他dll是组成Perl的位,但不知道如何调用它们。该文件夹中的foo.exe
大小只有78 kB,因此它不能比让其他位完成工作做得更多。不幸的是,似乎无法将-d
选项传递给perl.exe
。可能尝试在添加此功能的请求?在任何情况下,您都可以通过在代码中的选定点添加print
语句来尝试调试。您期望的结果是什么?这是一些“印刷”声明吗?看看-。这是一个常见的问题。你必须在顶部写上$|=1。@Håkon Hægland:我希望避免“打印调试”。@Maverick:不幸的是,你的建议没有什么不同。exe和pl都产生输出,但是当pl继续产生输出并快速完成时,exe似乎挂起。