c++ - valgrind 是否有可能报告我运行正确的程序的 fatal error ?

标签 c++ linux gdb valgrind

当我运行我的程序或使用 gdb 运行它时,它似乎运行正确,没有错误,并且我得到了预期的输出。

但是当我通过 valgrind ./program 使用 valgrind 运行它时,它甚至没有走多远。我收到 VALGRIND 内部错误:Valgrind 收到信号 11 (SIGSEGV) - 正在退出 一开始。 valgrind 输出对我没有任何帮助。我调用了一个子进程,但 valgrind 不遵循它。我尝试使用 --trace-children=yes 选项,但没有任何变化。

另一个问题:调用valgrind programvalgrind ./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)

提前致谢。

最佳答案

该错误表明您很可能在 valgrind 中遇到了错误。事实上,它已经被报告( https://bugs.kde.org/show_bug.cgi?id=271582 ),所以您应该将自己添加到该错误中,以便及时了解修复它的工作。

一般来说,此类“VALGRIND INTERNAL ERROR”消息应在 https://bugs.kde.org/enter_valgrind_bug.cgi 处报告。 ,确保包含在程序上运行 valgrind -v 的完整输出。

关于c++ - valgrind 是否有可能报告我运行正确的程序的 fatal error ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734657/

相关文章:

c - 如何单步执行 gdb 中的 longjmp

c++ - 当我在 GDB 中设置一个断点时,对于 c++ 文件,它到底在哪里中断?

c++ - 当服务器无法访问时,curl_easy_perform 返回 -1

c++ - Dice Game C++错误未声明的标识符/代码检查

c++线程池:用于将函数/lambdas传递给线程的std::function的替代方法?

mysql - 如何将变量从 shell 脚本传递到 mysql 脚本

值为指针的 C++ Map

c++ - 如何在特定地址声明一个结构?

c - 使用SIGTERM在子进程上调用kill会终止父进程,但是使用SIGKILL调用它会使父进程保持事件状态

c - 程序运行不佳(意味着输出(printf))但在 gdb t.exe 中运行良好