我有一个进程,它的核心转储在开始,想知道为什么。
我所做的就是
path_to/valgrind --undef-value-errors=no --error-limit=no --leak-check=yes --log-file=$MY_LOG_FILE my_process.exe
尽管这样会产生不太详细的日志文件,如下所示
==12688== Memcheck, a memory error detector
==12688== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12688== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==12688== Command: my_process.exe
==12688== Parent PID: 4469
==12688==
而不是非常详细核心文件
malloc.c:2392: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
我想做的是有一个详细的valgrind核心文件,但不知道如何做到这一点。另一个选择,这将是伟大的-是附加与gdb的进程,但如何做到这一点,如果进程核心在开始?
谢谢你的建议。
2条答案
按热度按时间zfciruhq1#
另一个很好的选择是将gdb附加到进程上,但是如果进程一开始就核心化了,该怎么做呢?
在这种情况下,您不需要附加到进程,您可以在gdb中从start开始运行它:
41zrol4v2#
要做到这一点,使用valgrind的gdbserver,用
valgrind --vgdb=yes
启动它,然后随时在GDB中使用target remote | vgdb
连接到它。通常你也会在启动valgrind时使用--vgdb-error=0
,让它在错误时等待GDB连接。