perl 脚本仅在使用 -d 开关运行时才会引发编译错误

标签 perl debugging compiler-errors

我有一个 perl 脚本,当我尝试使用 -d 开关在 Debug模式下运行它时,它运行良好。
当我使用 -d 开关时,出现如下编译错误:

Loading DB routines from perl5db.pl version 1.33
Editor support available.

Enter h or `h h' for help, or `perldoc perldebug' for more help.

main::(..\..\bin\testnbestrover1.pl:23):
23:     binmode STDOUT, ":utf8";
Access is denied.
Unknown error
Compilation failed in require at //fbl/NAS/PUB/RapTools/Perl64/lib/Term/ReadLine
/Perl.pm line 65.
 at //fbl/NAS/PUB/RapTools/Perl64/lib/Term/ReadLine/Perl.pm line 65
        Term::ReadLine::Perl::new('Term::ReadLine', 'perldb', 'GLOB(0x382418)',
'GLOB(0x322c30)') called at //fbl/NAS/PUB/RapTools/Perl64/lib/perl5db.pl line 60
68
        DB::setterm called at //fbl/NAS/PUB/RapTools/Perl64/lib/perl5db.pl line
2241
        DB::DB called at ..\..\bin\testnbestrover1.pl line 23
Attempt to reload Term/ReadLine/readline.pm aborted.
Compilation failed in require at //fbl/NAS/PUB/RapTools/Perl64/lib/Term/ReadLine
/Perl.pm line 65.
END failed--call queue aborted at ..\..\bin\testnbestrover1.pl line 65.
 at ..\..\bin\testnbestrover1.pl line 65

当我在没有 -d 开关的情况下运行脚本时,不会发生这种情况。关于这里可能出现什么问题的任何想法?

谢谢!

编辑:
如果我注释掉 binmode STDOUT, ":utf8"; 在 Term/ReadLine/Perl.pm 第 65 行中会发生同样的错误。陈述。
在网上搜索此特定错误时,我发现其他人在使用“>”运算符将 STDOUT 重定向到文件时遇到了同样的错误。事实证明,我的 perl 命令正在做同样的事情,当我删除它时,调试器工作正常。
似乎是特定 perl 调试器的问题(即 per5db.pl 1.33 版)?

最佳答案

堆栈跟踪表明问题来自从调试器加载的 Term::ReadLine::Perl。所以没有调试 -> 没有加载调试器 -> 没有加载 Term::ReadLine::Perl -> 没有错误。

从查看 Term::ReadLine::Perl 来看,我猜问题出在它尝试加载 Term::ReadLine::readline 的行中,该行尝试使用 STDIN、STDOUT 等执行一些操作以将其用作终端。因为这实际上意味着,某些字节序列具有特殊含义(转义和控制代码,例如重置终端、切换线路模式、回显等),这可能会与您的 binmode STDOUT 设置有关。

关于perl 脚本仅在使用 -d 开关运行时才会引发编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464597/

相关文章:

linux - 如何将多列中的数字排序或重新排列为多行[固定为 4 列]?

java - 用于 Java 的 Perl 的 Net::FTPSSL 模拟或如何在 Java 中使用 FTP over SSL

perl - 使用 Perl 从文本文件中提取和打印键值对

linux - Linux 目标的相关调试数据

Java 调试器查找实例化对象的位置

gcc - 从源代码编译miniupnpc

perl 打开文件错误处理

python - 向 Python 打印添加日期时间戳

c++ - 错误 : was not declared in this scope with C++

node.js - 安装nodetime时编译出错