在我的 C++ 程序中,我有一个在运行时打印当前调用堆栈的函数,如下所示:
int printFct(uintptr_t pc, int sig, void* usrarg)
{
Dl_info dlip;
if (dladdr((void *)pc, &dlip))
{
char buf[100+1]; *buf= 0;
if (cplus_demangle(dlip.dli_sname, buf, 100) == 0)
printf(" %s\n", buf);
else
printf(" %s\n", dlip.dli_sname);
return 0;
}
return -1;
}
void printStack()
{
ucontext_t context;
if (getcontext(&context) != 0)
return;
walkcontext(&context, &printFct, 0);
}
这很好用,但是我没有得到任何行号。有没有办法为调用的相应函数打印行号?
[编辑]澄清:我不想将堆栈写入文件以供稍后分析,我想在运行时将其打印在标准输出上,因此命令行gaddr2line
不是一个选项。