static void print_trace (void) { void *array[100]; size_t size; char **strings; size_t i; size = backtrace(array, sizeof(array)/sizeof(void *)); strings = backtrace_symbols(array, size); #ifdef _REENTRANT Sdprintf("on_alarm() Prolog-context [thread %d]:\n", PL_thread_self()); #else Sdprintf("on_alarm() Prolog-context:\n"); #endif PL_action(PL_ACTION_BACKTRACE, 3); Sdprintf("on_alarm() C-context:\n"); for(i = 0; i < size; i++) { if ( !strstr(strings[i], "checkData") ) Sdprintf("\t[%d] %s\n", i, strings[i]); } free(strings); }
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { PL_action(PL_ACTION_GUIAPP, TRUE); char *av[] = { __argv[0], 0}; PlEngine e(sizeof(av) / sizeof(*av) - 1, av); elog::elog.init(L"editor.log"); elog::elog.openChannels(true); App::Run<Editor>(hInstance, lpCmdLine); return 0; }