Возможно ли, что valgrind сообщает о фатальных ошибках моей программы, которая работает правильно? - PullRequest
2 голосов
/ 18 июля 2011

Когда я запускаю свою программу или когда я запускаю ее с gdb, кажется, что она работает правильно, ошибок нет, и я получаю вывод, как и ожидалось.

Но когда я запускаю ее с valgrind через valgrind ./program, это даже не далеко.Я получаю VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - выход в самом начале.Вывод valgrind мне совсем не помогает.Я вызываю дочерний процесс, но valgrind не следует за ним.Я попытался использовать параметр --trace-children=yes, но без изменений.

Другой вопрос: в чем разница между вызовами valgrind program и valgrind ./program?

Вывод, который я получаю:

$ valgrind --tool=memcheck --trace-children=yes ./program

==2616== Memcheck, a memory error detector

==2616== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.

==2616== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info

==2616== Command: ./program

==2616== 

Parent pid is 2616

Child pid is 2619

main() could not create fifo

--2619-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting

--2619-- si_code=2;  Faulting address: 0x400DFD;  sp: 0x403277b70

valgrind: the 'impossible' happened:

   Killed by fatal signal

==2619==    at 0x3802D33A: mash_colon_env (m_libcproc.c:195)

==2619==    by 0x3802D6FD: vgPlain_env_remove_valgrind_env_stuff (m_libcproc.c:254)

==2619==    by 0x3806EB7C: vgSysWrap_generic_sys_execve_before (syswrap-generic.c:2622)

==2619==    by 0x38068750: vgPlain_client_syscall (syswrap-main.c:1443)

==2619==    by 0x380651E9: handle_syscall (scheduler.c:895)

==2619==    by 0x38066D6A: vgPlain_scheduler (scheduler.c:1091)

==2619==    by 0x380763FC: run_a_thread_NORETURN (syswrap-linux.c:94)

sched status:

  running_tid=1

Thread 1: status = VgTs_Runnable

==2619==    at 0x567D957: execve (execve.c:60)

==2619==    by 0x567E1E8: execvpe (execvpe.c:151)

==2619==    by 0x400B2D: main (program2.cpp:34)

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 18 июля 2011

Эта ошибка означает, что вы, скорее всего, столкнулись с ошибкой в ​​valgrind.На самом деле об этом уже сообщалось (https://bugs.kde.org/show_bug.cgi?id=271582), поэтому вы должны добавить себя к этой ошибке, чтобы быть в курсе работ по ее исправлению.

В общем, такие сообщения "VALGRIND INTERNAL ERROR" должнысообщать на https://bugs.kde.org/enter_valgrind_bug.cgi,, убедившись, что вы включили полный вывод из valgrind -v в свою программу.

0 голосов
/ 18 июля 2011

Вы должны использовать Valgrind "follow-fork-mode" child. Вот почему Valgrind может не следить за вашим дочерним процессом.

...