如何获取详细的 valgrind 核心或使用 gdb 将调试附加到核心在启动时转储的进程?

Posted

技术标签:

【中文标题】如何获取详细的 valgrind 核心或使用 gdb 将调试附加到核心在启动时转储的进程?【英文标题】:How to get detailed valgrind core or attach for debug with gdb to the process which cores dump at start? 【发布时间】:2019-11-18 14:06:53 【问题描述】:

我有一个进程在开始时核心转储,我想知道原因。

我能做到的就是这个

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 附加到进程,但如果进程在开始时核心如何执行?

感谢您的想法。

【问题讨论】:

【参考方案1】:

另一个很棒的选择 - 将 gdb 附加到进程,但如果进程在开始时核心如何执行?

在这种情况下你不需要附加到进程中,你可以从一开始就在 gdb 中运行它:

$ gdb my_process.exe
...
(gdb) run
...

【讨论】:

以上是关于如何获取详细的 valgrind 核心或使用 gdb 将调试附加到核心在启动时转储的进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 和 GD 获取图像资源大小(以字节为单位)?

使用 Valgrind 获取指令配置文件

如何使用 GD 或 Imagick 在非透明纯色图像内创建透明区域?

使用 Jcrop 裁剪并使用 PHP GD 保存时如何获取可变宽度和高度

Valgrind:禁用条件跳转(或整个库)检查

Valgrind - 打开 Windows 内存转储