0

在我的 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不是一个选项。

4

0 回答 0