在我的C ++程序中,我有一个在运行时打印当前callstack的函数,如下所示:
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);
}
这很好用,但我没有给出任何行号。有没有办法打印相应函数的行号?
[编辑]澄清:我不想要将堆栈写入文件以便稍后进行分析,我想在运行时在stdout上打印它,所以命令行gaddr2line
不是一个选项。