У меня есть сценарий R, который генерирует ошибку segfault. Сценарий R использует пакет «RSofia», который внутренне вызывает программу на C++, используя пакет Rcpp, который, как я считаю, вызывает проблему.Интерпретация вывода valgrind скрипта R
Пожалуйста, обратитесь к ссылке на вопрос, который я разместил на том же: 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: ???
Может кто-нибудь помочь с тем, как найти ошибку из этого сообщения и что может быть возможным?
Для segfaults, как правило, «легче» запускать под отладчиком, а затем перемещаться вверх/вниз по кадру, чтобы увидеть вызовы, вызывающие проблемы. Есть [некоторые подсказки] (http://bioconductor.org/developers/how-to/c-debugging/). –
Valgrind 3.8.1 теперь довольно старый. Итак, первое, что нужно попробовать - это перейти на новую версию (3.11.0), которая a.o. будет поддерживать более новые процессоры/hwcaps и/или будет иметь меньше ошибок :) – phd
Я установил Valgrind через yum install. Не уверен, что он подбирает старую версию. – Ravi