1

许多应用程序在崩溃时会生成错误日志,这样可以很容易地找到错误。为了达到同样的效果,我使用 Linux 信号处理来捕获分段错误。我使用stacktrace.h生成跟踪:

void sigsegvHandler(int)
{
  signal(SIGABRT, 0);
  signal(SIGSEGV, 0);
  FILE * errorLog;
  errorLog = fopen ("/tmp/myapp.log" , "w");
  qDebug() << "\n\n*************************************************************\n";
  qDebug() << "Catching SIGSEGV, please report a bug at http://mysite.com/bugs
  qDebug() << "MyApp version: " << "1.0-1" << "\n";
  print_stacktrace(errorLog);
  fclose(errorLog);
  raise(SIGSEGV);
}

但是生成的跟踪几乎没有说明崩溃。如果我们使用应用程序的调试版本,就不可能生成指向发生崩溃的代码中的行号的跟踪,就像我们使用 gdb 时发生的那样。

4

0 回答 0