Fry3DX/engine/crash.h
Nexoniarz f3e8eca87b Fry3DX 0.4: an easy 3D modeller
Shapes with live settings, shape editing, knife and hole tools, drawing
shapes onto other objects, combining objects (add / subtract / overlap),
copies, thickness, painting with stickers and layers, a Layout tab, a
Print tab with checks, packed .fry files with autosave, export to GLB,
glTF, FBX, OBJ, 3MF, STL and PLY, folders in Layers, its own crash
screen, and a website for GitHub Pages in docs/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NMSrd5oe1GpUD7E6d825KP
2026-10-19 21:18:35 +02:00

25 lines
1.1 KiB
C++

#pragma once
// Crashes and freezes end on a crash screen instead of a frozen or vanished window: a crash
// (segfault, abort, an uncaught exception) or a freeze (no frame for a while: the watchdog)
// writes a report (what happened, a backtrace, the last log lines) to <pref>/crash.txt and
// starts the program again as `-crashreport <file>`, which shows ":(" with what happened and
// Restart / Copy report / Quit. Off under a debugger and with -nowatchdog (the watchdog only).
#include <string>
#include <vector>
namespace keel::crash {
// After the pref path is known; args: the command line, for Restart.
void install(const std::string& prefPath, const std::vector<std::string>& args, bool watchdog);
// Once a frame: the main loop is alive.
void heartbeat();
// While something on the main thread is slow on purpose (building, loading), the watchdog waits.
struct Busy {
explicit Busy(const char* what);
~Busy();
};
// `-crashreport <file> [-- args]`: shows the crash screen and returns the exit code; -1 if the
// command line isn't one.
int runReporter(int argc, char** argv);
} // namespace keel::crash