我明白了:
==830== at 0x4CD40DC: DebugSyslogHandlerFunc(DebugContext const&) (DebugSyslogHandler.cpp:202)
==830== by 0x6A2F3: AssertHandler::~AssertHandler() (Debug.hpp:1219)
==830== by 0x77F03: CircularQueue::capoffData(int) (CircularQueue.hpp:1216)
我想:
==830== at 0x4CD40DC: /usr/local/lib/shared_lib1.so.0: DebugSyslogHandlerFunc(DebugContext const&) (DebugSyslogHandler.cpp:202)
==830== by 0x6A2F3: /usr/local/lib/shared_lib2.so.0: AssertHandler::~AssertHandler() (Debug.hpp:1219)
==830== by 0x77F03: /usr/local/bin/my_exe: CircularQueue::capoffData(int) (CircularQueue.hpp:1216)
(在每个地址之后都有二进制路径和名称) 我找不到那样的东西。
如何告诉valgrind使用二进制名称(可执行文件,共享库)预先添加堆栈帧?
答案 0 :(得分:1)
无法指示valgrind始终输出对象名称。 如果valgrind找到源位置,则它不输出对象名称。
总是输出对象名称的更改无关紧要:
在debuginfo.c中添加以下标记的行(未经测试)应该可以正常工作
if (know_srcloc) {
if (know_objname) { // Add from here
APPEND(" (in "); //
APPEND(buf_obj); //
APPEND(")"); //
} // Till here
APPEND(" (");