解释R脚本的valgrind输出

时间:2015-11-04 19:48:17

标签: c++ r valgrind rcpp

我有一个R脚本会引发段错误。 R脚本使用一个包“RSofia”,它使用Rcpp包在内部调用C ++程序,我相信这会引起问题。

请参阅我发布的问题的链接:RSofia Issue

我正在尝试使用valgrind调试并确定导致问题的原因如下:

R -d "valgrind --leak-check=full --show-reachable=yes" -f svm.r

这会抛出以下输出:

==11235== Memcheck, a memory error detector
==11235== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==11235== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==11235== Command: /usr/lib64/R/bin/exec/R -f svm.r
==11235== 

vex: priv/main_main.c:319 (LibVEX_Translate): Assertion `are_valid_hwcaps(VexArchAMD64, vta->archinfo_host.hwcaps)' failed.
vex storage: T total 0 bytes allocated
vex storage: P total 0 bytes allocated

valgrind: the 'impossible' happened:
  LibVEX called failure_exit().
==11235==    at 0x38031DA7: report_and_quit (m_libcassert.c:235)
==11235==    by 0x38031E0E: panic (m_libcassert.c:319)
==11235==    by 0x38031E68: vgPlain_core_panic_at (m_libcassert.c:324)
==11235==    by 0x38031E7A: vgPlain_core_panic (m_libcassert.c:329)
==11235==    by 0x3804D162: failure_exit (m_translate.c:708)
==11235==    by 0x380D4C38: vex_assert_fail (main_util.c:219)
==11235==    by 0x380D3009: LibVEX_Translate (main_main.c:319)
==11235==    by 0x3804AACE: vgPlain_translate (m_translate.c:1559)
==11235==    by 0x38079D9F: vgPlain_scheduler (scheduler.c:991)
==11235==    by 0x380A6409: run_a_thread_NORETURN (syswrap-linux.c:103)

sched status:
running_tid=1

Thread 1: status = VgTs_Runnable
==11235==    at 0x4000B00: ??? (in /lib64/ld-2.12.so)
==11235==    by 0x2: ???
==11235==    by 0x7FF00036E: ???
==11235==    by 0x7FF000386: ???
==11235==    by 0x7FF000389: ???

有人可以帮忙找出如何从此邮件中找到错误以及可能解决此问题的原因吗?

1 个答案:

答案 0 :(得分:1)

看起来它正在使用assert(),根据Writing R Extension首先不应该使用assert()

现在为什么#include <mgl2/mgl_cf.h> int main() { HMGL gr = mgl_create_graph(600,400); mgl_fplot(gr,"sin(pi*x)","",""); mgl_write_frame(gr,"test.png",""); mgl_delete_graph(gr); } 评估它的方式,因此中止是另一回事。但是对于那个人来说,需要一个可重复性最低的例子,加上一些空余时间和耐心。