私のプログラムで使用しているのは、私のために働く....私のプログラムがクラッシュすると、クラッシュサイトのスタックトレースがstdoutに出力されます(おそらく、ファイルなどにリダイレクトされます後で)。あなたは、スタックトレースは、人間が読み取り可能な関数名が含まれていることを確認するCXXFLAGSにフラグとして-rdynamic渡す必要があり、および/またはあなたのMakefileのLFLAGSも
注意。
#include <stdio.h>
#include <signal.h>
#include <execinfo.h>
void PrintStackTrace()
{
void *array[256];
size_t size = backtrace(array, 256);
char ** strings = backtrace_symbols(array, 256);
if (strings)
{
printf("--Stack trace follows (%zd frames):\n", size);
for (size_t i = 0; i < size; i++) printf(" %s\n", strings[i]);
printf("--End Stack trace\n");
free(strings);
}
else printf("PrintStackTrace: Error, could not generate stack trace!\n");
}
static void CrashSignalHandler(int sig)
{
// Uninstall this handler, to avoid the possibility of an infinite regress
signal(SIGSEGV, SIG_DFL);
signal(SIGBUS, SIG_DFL);
signal(SIGILL, SIG_DFL);
signal(SIGABRT, SIG_DFL);
signal(SIGFPE, SIG_DFL);
printf("CrashSignalHandler called with signal %i... I'm going to print a stack trace, then kill the process.\n", sig);
PrintStackTrace();
printf("Crashed process aborting now.... bye!\n");
fflush(stdout);
abort();
}
int main(int argc, char ** argv)
{
signal(SIGSEGV, CrashSignalHandler);
signal(SIGBUS, CrashSignalHandler);
signal(SIGILL, CrashSignalHandler);
signal(SIGABRT, CrashSignalHandler);
signal(SIGFPE, CrashSignalHandler);
[...remainder of your program goes here...]
}
余分なスレッド、スレッドされたサブシステム、アウトプロセスサーバーはありますか? 「スーパーのtry-catchブロック」は、このような環境で発生したエラーをトラップしません。 –
はい複数のスレッドがあります。私は今それらのそれぞれのtry-catchブロックを追加しました。私は「プロセス外のサーバー」が何であるか知りません。私は間違っている可能性がありますWindowsのもののように見える速いGoogleから、? – Pryo