feat(crash): Breakpad-style minidumps on macOS and Windows
Ghostty links sentry-native with the breakpad backend on every platform (SharedDeps.zig), so it writes minidumps on macOS and Windows as well. - macOS: a Mach exception port handler thread (structured like Breakpad's exception_handler) catches EXC_BAD_ACCESS/BAD_INSTRUCTION/ ARITHMETIC/BREAKPOINT, suspends other threads, reads the crashed thread state and writes a minidump via minidump-writer as the event.minidump attachment, then restores the previous ports so the BSD signal and default termination follow. The signal path remains the fallback (and handles SIGABRT); a watchdog alarm bounds dumping. - Windows: SetUnhandledExceptionFilter hands off to a pre-started dump thread using minidump-writer's dump_crash_context. - The screen-file open action decodes the escaped path to raw OS bytes (also for the C action passed to embedders). macOS/Windows code is compile-checked (clippy -D warnings) only; the shared Mach message decoding and minidump attachment logic have Linux unit tests. Platform matrix in docs/rewrite/notes/crash-CR.md. Test Plan: - cargo test --workspace (3348 passed) - just check-macos; just check-macos x86_64-apple-darwin; just check-windows
This commit is contained in:
1 parent
162aa260f1
commit
72bfac1cc8
12 files changed
+914
-34
No files matched your search
@@ -183,8 +183,11 @@ pub fn action_to_c(action: &Action, keep: &mut Keep) -> ghostty_action_s {
|
||||
}
|
||||
Action::OpenUrl(u) => {
|
||||
v.open_url.kind = u.kind as c_int;
|
||||
v.open_url.url = keep.cstr(&u.url);
|
||||
v.open_url.len = u.url.len();
|
||||
// The URL may be the escaped form of a non-UTF-8 path; hand the
|
||||
// embedder the real bytes.
|
||||
let url = ghostty_os::osbytes::config_str_to_bytes(&u.url);
|
||||
v.open_url.url = keep.cstr_bytes(&url);
|
||||
v.open_url.len = url.len();
|
||||
}
|
||||
Action::ShowChildExited(c) => {
|
||||
v.child_exited.exit_code = c.exit_code;
|
||||
|
||||
Reference in new issue
Block a user