X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace_main.cpp;h=a59ee9ae81f3f4aecbdd8b6501a77eaf3f05bffb;hb=d1623a2829191e6837d89bc2022ee1495f3d5aee;hp=e3e74f84cf20d979928b6fd704593939f22305ba;hpb=b35ae0df401ff22e3b2dc9b6bfacf1e23baebde0;p=apitrace diff --git a/retrace/retrace_main.cpp b/retrace/retrace_main.cpp index e3e74f8..a59ee9a 100644 --- a/retrace/retrace_main.cpp +++ b/retrace/retrace_main.cpp @@ -79,6 +79,11 @@ frameComplete(trace::Call &call) { } +static Dumper defaultDumper; + +Dumper *dumper = &defaultDumper; + + /** * Take/compare snapshots. */ @@ -99,7 +104,7 @@ takeSnapshot(unsigned call_no) { } } - image::Image *src = getSnapshot(); + image::Image *src = dumper->getSnapshot(); if (!src) { return; } @@ -162,7 +167,7 @@ retraceCall(trace::Call *call) { takeSnapshot(call->no); if (call->no >= dumpStateCallNo && - dumpState(std::cout)) { + dumper->dumpState(std::cout)) { exit(0); } } @@ -540,6 +545,13 @@ longOptions[] = { {0, 0, 0, 0} }; + +static void exceptionCallback(void) +{ + std::cerr << retrace::callNo << ": error: caught an unhandled exception\n"; +} + + extern "C" int main(int argc, char **argv) { @@ -640,9 +652,10 @@ int main(int argc, char **argv) retrace::profiler.setup(retrace::profilingCpuTimes, retrace::profilingGpuTimes, retrace::profilingPixelsDrawn); } + os::setExceptionCallback(exceptionCallback); + for (i = optind; i < argc; ++i) { if (!retrace::parser.open(argv[i])) { - std::cerr << "error: failed to open " << argv[i] << "\n"; return 1; } @@ -650,6 +663,8 @@ int main(int argc, char **argv) retrace::parser.close(); } + + os::resetExceptionCallback(); // XXX: X often hangs on XCloseDisplay //retrace::cleanUp();