c – Perl系统调用导致核心转储但是$?保持为零
发布时间:2020-12-16 06:54:34 所属栏目:百科 来源:网络整理
导读:我有一个Perl脚本(在VirtualBox中的Xubuntu Lucid Lynx上运行)包含几个C/C++二进制文件,将一个输入提供给其他人.其中一条通常包括: my $ret_code=`cat $input | c_binary`;my $ret_val= $?; 对于某些输入文件,代码会导致coredump,但$ret_val和$ret_code分别
我有一个Perl脚本(在VirtualBox中的Xubuntu Lucid Lynx上运行)包含几个C/C++二进制文件,将一个输入提供给其他人.其中一条通常包括:
my $ret_code=`cat $input | c_binary`; my $ret_val= $?; 对于某些输入文件,代码会导致coredump,但$ret_val和$ret_code分别为0和“”.我可以看到运行它时滚动的错误,但我似乎无法以编程方式“捕获”此错误.我怎么能这样做?意图是在错误中从输入中删除一些行并重试解析. 以下是错误: *** stack smashing detected ***: code/parser terminated ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x798390] /lib/tls/i686/cmov/libc.so.6(+0xe233a)[0x79833a] code/parser[0x804edd8] [0x2e303039] ======= Memory map: ======== 0043b000-0043c000 r-xp 00000000 00:00 0 [vdso] 0045a000-00475000 r-xp 00000000 08:01 11041 /lib/ld-2.11.1.so 00475000-00476000 r--p 0001a000 08:01 11041 /lib/ld-2.11.1.so 00476000-00477000 rw-p 0001b000 08:01 11041 /lib/ld-2.11.1.so 006b6000-00809000 r-xp 00000000 08:01 10897 /lib/tls/i686/cmov/libc-2.11.1.so 00809000-0080a000 ---p 00153000 08:01 10897 /lib/tls/i686/cmov/libc-2.11.1.so 0080a000-0080c000 r--p 00153000 08:01 10897 /lib/tls/i686/cmov/libc-2.11.1.so 0080c000-0080d000 rw-p 00155000 08:01 10897 /lib/tls/i686/cmov/libc-2.11.1.so 0080d000-00810000 rw-p 00000000 00:00 0 008ba000-008d7000 r-xp 00000000 08:01 8268 /lib/libgcc_s.so.1 008d7000-008d8000 r--p 0001c000 08:01 8268 /lib/libgcc_s.so.1 008d8000-008d9000 rw-p 0001d000 08:01 8268 /lib/libgcc_s.so.1 00c89000-00cad000 r-xp 00000000 08:01 10901 /lib/tls/i686/cmov/libm-2.11.1.so 00cad000-00cae000 r--p 00023000 08:01 10901 /lib/tls/i686/cmov/libm-2.11.1.so 00cae000-00caf000 rw-p 00024000 08:01 10901 /lib/tls/i686/cmov/libm-2.11.1.so 08048000-08055000 r-xp 00000000 08:01 407893 /home/abugorsk/Documents/code/stepbystep/collins-parser/code/parser 08055000-08056000 r--p 0000c000 08:01 407893 /home/abugorsk/Documents/code/stepbystep/collins-parser/code/parser 08056000-08057000 rw-p 0000d000 08:01 407893 /home/abugorsk/Documents/code/stepbystep/collins-parser/code/parser 08057000-0c50f000 rw-p 00000000 00:00 0 0e168000-0fa57000 rw-p 00000000 00:00 0 [heap] b44a3000-b77c9000 rw-p 00000000 00:00 0 b77da000-b77dc000 rw-p 00000000 00:00 0 bff2b000-bff40000 rw-p 00000000 00:00 0 [stack] Aborted 返回的值是: LOG: Parser return code: 0 LOG: Parser return value: 有问题的实际代码段: my $command = "cd $STEPBYSTEP_HOME/collins-parser; cat models/model$model_num/events | code/parser $src models/model$model_num/grammar 10000 1 1 1 1 1> $dest 2> $parse_log"; llog "Executing command: $command"; my $ret_code = $?; llog "Parser return code: $ret_code"; my $ret_val = `$command`; 解决方法
首先,你的命令行中有一只无用的猫可以很容易地被重定向取代.
我尝试将命令更改为以下内容 my $command = "cd $STEPBYSTEP_HOME/collins-parser && code/parser $src models/model$model_num/grammar 10000 1 1 1 1 < models/model$model_num/events 1> $dest 2> $parse_log"; 或者,如果您正在尝试最小化输入文件以查找导致崩溃的任何内容,我强烈建议使用Delta,这会有效地自动执行此操作 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |