加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中调试分段错误有哪些好的方法或步骤?

发布时间:2020-12-15 23:27:36 所属栏目:大数据 来源:网络整理
导读:有两种情况我的代码不会导致 segmentation fault: 当我在至少一个地方使用Smart::Comments时 运行调试器. 我跟踪了这??个电话: $action-{breakdown} = join( ' ',each_pair { my ( $name,$length ) = @_; return "x$length" if $name eq 'FILLER'; push @$
有两种情况我的代码不会导致 segmentation fault:

>当我在至少一个地方使用Smart::Comments时
>运行调试器.

我跟踪了这??个电话:

$action->{breakdown} 
    = join( ' ',each_pair { 
                my ( $name,$length ) = @_;
                return "x$length" if $name eq 'FILLER';
                push @$field_list_ref,$name;
                return "A$length";

            } @$field_def_ref
    );

其中each_pair在另一个模块中定义为:

sub each_pair (&@) { 
    my $block   = shift;
    return unless @_;
    my $caller  = caller();
    my $aref    = qualify( 'a',$caller );
    my $bref    = qualify( 'b',$caller );
    my @results;
    my $pairs   = 0;

    for ( my $index = 0; $index < $#_; $index += 2 ) { 
        $pairs++;
        my @pair                 = @_[$index..($index+1)];
        no strict 'refs';
        local ( $$aref,$$bref ) = @pair;
        push @results,$block->( @pair );
    }
    return wantarray || $pairs != 1 ? @results : shift @results;
}

>现在我知道我可以用List::MoreUtils::natatime替换each_pair(虽然我听说有一些错误),他们最近才允许这个模块进入我们的环境,我仍然对这个调用导致分段错误的原因感兴趣 – 或者其他Perl程序员由于调试分段错误.

我已经失去了一点时间.

编辑

我有其他模块使用这个函数,有些人希望能够使用$a和$b,也可以在同一个模块的其他地方使用另一个列表.我可以更改它的这个调用,我可以为这个文件更改它,但是为每个成功使用它的地方更改它可能比我在这个晚些时候允许做的更多更改.

解决方法

在Perl中,分段错误非常罕见.我不记得上次遇到一个.

调试器具有足够的干扰性,代码在那里表现不同并不特别令人惊讶,尽管它确实令人沮丧. Smart :: Comments使用源过滤器(我们都知道)是邪恶的.进入Smart :: Comments的源代码,我看到它使用了List :: Util,它通常使用XS实现. List :: Util可能会“修复”您的问题.尝试直接使用List :: Util但不要使用Smart :: Comments.这不会解决任何问题,但可能会将源滤波器的不确定性排除在等式之外.

不幸的是,你的问题似乎不是代码本身,而是不同事物之间的意外交互.您无法直接在Perl中触发分段错误. root必须是perl本身或XS代码.如果您可以将其减少到一个小但完整的样本,其他人可能能够重现并隔离问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读