我正在使用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天仍然賞金所以記住這些答案來了!
這看起來像一個不錯的解決方案..我認爲這將是很難改善:) –