多くのアプリケーションでは、クラッシュ時にエラー ログが生成されるため、バグを簡単に見つけることができます。同じことを達成するために、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 を使用した場合のように、クラッシュが発生したコードの行番号を指すトレースを生成することはできませんか。