我正在使用Perl Tkx应用程序,并且遇到有用/正确的错误消息时遇到问题。我试图使用croak,所以它会告诉我确切的位置,但每次它都会说错误位于“C:/Perl64/lib/Tkx.pm 347行”。错误处理使用Perl Tkx
我写了一个非常简单的脚本来证明所发生的事情:
#!/usr/bin/perl
use strict;
use warnings;
use Carp;
use Tkx;
my $mw = Tkx::widget->new(".");
my $b = $mw->new_button(
-text => "Hello, world",
-command => sub { croak; },
);
$b->g_pack;
Tkx::MainLoop();
当我运行此脚本,然后单击该按钮出现以下弹出框:
我该如何让Tkx处理类似于使用croak的错误普通的Perl脚本?有没有办法强制croak打印到STDOUT或STDERR?
编辑:
迈克尔·卡曼带来了一个好点通常具有GUI控制台将被抑制,用户将不会看到发送到标准输出或STDERR一个错误,但如何找到一种修改“应用程序错误”对话框中的文本以说出有用的东西的方法?那可能吗?
对于最终用户而言,文本不一定非常有用,但至少应该被程序员理解,以便他们知道最终用户报告问题的位置。
EDIT2:
好吧,似乎使用die
或confess
代替croak
打印出更实用的错误消息的“应用程序错误”窗口,但一旦我点击“OK”节目刚继续并且不实际死亡。我怎样才能“杀死它直到它死了”并确保它保持死亡?
可能的解决方案:
这里建过迈克尔·卡曼的回应可能的解决方案。我修改了它稍微因为我觉得一个消息框看起来有点更好:)
#!/usr/bin/perl
use strict;
use warnings;
use Tkx;
use Carp;
my $mw = Tkx::widget->new(".");
my $b = $mw->new_button(
-text => "Hello, world",
-command => sub { die "uh-oh"; },
);
$b->g_pack;
Tkx::eval(<<'EOT');
proc bgerror {message} {
tk_messageBox -title "Application Error" -message $message -icon error -type ok
destroy .
}
EOT
Tkx::MainLoop();
到目前为止,这是最好的解决办法,但5天仍然赏金所以记住这些答案来了!
这看起来像一个不错的解决方案..我认为这将是很难改善:) –