Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试使用Perl PAR包装机(PP)创建的可执行文件?_Perl_Debugging_Pp Perl Par Packager - Fatal编程技术网

如何调试使用Perl PAR包装机(PP)创建的可执行文件?

如何调试使用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,其中和

我使用了从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
,其中
是短的和长的十六进制字符串。我本来希望找到
…\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似乎挂起。