获取solaris上的堆栈跟踪中的行号

时间:2013-10-08 07:19:22

标签: c solaris callstack backtrace line-numbers

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

0 个答案:

没有答案