在 Perl 中调试段错误



我正在尝试调试我从Perl得到的段错误。

我正在使用:

  • Perl 5.8.8
  • 净::SSH2 0.45
  • Libssh2 1.4.2
  • Openssl 0.9.8x(但我在 1.0.1c 上也有同样的问题)

当我调用以下信息时,就会出现问题:

my $ssh = Net::SSH2->new();

我已经用Perl调试器(perl -d)运行它并逐步进入Net::SSH2,它在行中出现段错误:

my $self = $class->_new;

段错误之后的输出没有帮助:

zsh: segmentation fault  perl -d ./test.pl

运行strace以:

open("<snip>/perl/lib/perl5.8/Linux-2.6c2.5-x86_64-64int/Net/SSH2/Listener.pm", O_RDONLY) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffb9cdc920) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(4, 0, SEEK_CUR)                   = 0
read(4, "package Net::SSH2::Listener;nnus"..., 4096) = 804
lseek(4, 90, SEEK_SET)                  = 90
lseek(4, 0, SEEK_CUR)                   = 90
close(4)                                = 0
read(3, "", 4096)                       = 0
close(3)                                = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

现在我被困住了。接下来我该怎么做?如何深入挖掘以找出问题所在?

唯一不能改变的是我必须使用 Perl 5.8.8(我别无选择)。


PSIAlt建议的方法gdb输出:

Program received signal SIGSEGV, Segmentation fault.
0x000000379ea141dc in __longjmp () from /lib64/ld-linux-x86-64.so.2
(gdb) bt
#0  0x000000379ea141dc in __longjmp () from /lib64/ld-linux-x86-64.so.2
#1  0x0101f58e4fc7bacc in ?? ()
Cannot access memory at address 0x101f58e475b223b
(gdb) 

所以,没有太多帮助...

同样,我真正的问题是"下一步是什么?

它在

Ubuntu 12.10 x86_64,perl 5.8.8(由perlbrew编译),libssh2 1.4.2,openssl 1.0.1c和Net::SSH2 0.46下对我有用。

在Unix/Linux下,Net::OpenSSH可能是更好的选择。它甚至可以通过Net::OpenSSH::Compat模拟大部分Net::SSH2 API。

相关内容

  • 没有找到相关文章

最新更新