stefp has asked for the wisdom of the Perl Monks concerning the following question:

How can I force Tk to print the stack of calls that led to an error? Below is a typical error obtained from Tk. The problem is that it does not tell me where I messed up.
No -label at /usr/lib/perl5/site_perl/5.6.1/i386-linux/Tk/ li +ne 247

-- stefp -- check out TeXmacs wiki

Replies are listed 'Best First'.
Re: how can I coerce Tk to cluck
by {NULE} (Hermit) on May 13, 2002 at 20:25 UTC

    This is a good question. In this case the error is telling you that some widget requires a '-label' parameter and did not get it. (The prime example of this is the command method of a Menubutton widget, which if left without a label will produce this exact error.)

    Normally use Tk::ErrorDialog will produce a stack, with useful information, but neither that nor a custom Tk::Error sub will produce useful information in the example that I gave.

    sub Tk::Error { my ($widget, $error, @locations) = @_; print "Widget:\n\t$widget\n"; print "Error:\n\t$error\n"; print "Locations:\n"; map { print "\t$_\n" } @locations; }
    If you or anyone else comes upon a way to trap this kind of (rare) error that occurs outside of Tk's built-in error mechanism, I'd like to see it. In my experience this kind of thing is how pTk earns its undeserved bad reputation.

    Update: belg4mit snuck in a response a bit before me {g}, but I wanted to say that I have version 3.078 of as well and it does indeed produce this exact error at that line number if perform the action I describe above with the command method of a Menubutton widget. That is why this error appears to happen outside of Tk's Error handling mechanism.

    Good luck,

Re: how can I coerce Tk to cluck
by belg4mit (Prior) on May 13, 2002 at 20:16 UTC
    %SIG, signals. Tk also appears to have an AutoLoaded Error subroutine used for outputting other errors, you could override it (without strict).

    My (v3.078) here has no such warning in the code, and does in fact use Carp.

    perl -pew "s/\b;([mnst])/'$1/g"