0

我看到一些偶尔(五分之一)、瞬间(5-10 秒)在拖动时“冻结”——可能是-startcommand回调的一部分。它永远不会发生在第一次拖动。

回调很简单;它只是将拖动光标的文本设置为被拖动的值:

sub DragStart {
  my( $token ) = @_;

  my $w = $token->parent;
  my $e = $w->XEvent;

  my $idx = $w->nearest( $e->y );
  if( defined $idx ) {
    $token->configure( -text -> $w->get( $idx );
    my( $X, $Y ) = ( $e->x, $e->y );
    $token->MoveToplevelWindow( $X, $Y );
    $token->raise;
    $token->deiconify;
    $token->FindSite( $X, $Y, $e );
  }
}

我不禁想知道问题是否在我的代码之外,所以我想做的是找到一种方法来识别冻结发生时当前调用的子例程。

有这样的工具吗?显示实时调用堆栈的东西会做到这一点,如果有的话。

4

1 回答 1

2

您应该通过 Perl 的调试器之一运行您的应用程序。

由于您是 TK 人,您可以尝试Devel::ptkdb或者您只需选择标准的Perl 调试器

于 2009-07-20T17:39:27.517 回答