• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Suppressing Crash Reporter dialogs for a task
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Suppressing Crash Reporter dialogs for a task


  • Subject: Re: Suppressing Crash Reporter dialogs for a task
  • From: Ken Thomases <email@hidden>
  • Date: Tue, 22 Sep 2009 23:57:22 -0500

On Sep 22, 2009, at 2:27 PM, Alastair Houghton wrote:

If you was *your* process that crashed, on "normal" UNIX-like systems you can use signal handlers to catch the crash and do something about it. Likewise, on a normal UNIX-like platform you'd get a SIGCHLD from the system and you could check the process exit status. Or you could act as a debugger using the ptrace() API.

On OS X though, you can't (or couldn't, last I checked which was some time ago) intercept the system crash reporter using signal- related APIs because it's triggered by the lower-level Mach exception port. Even if you somehow handle the signal (in the parent or the child process), the crash reporter is still triggered via the Mach exception port.

On Tiger and earlier, the CrashReporter would generate a crash report for a Mach exception even if it was later delivered as a signal and handled by the process. Since Leopard, though, a crash report is only generated if the signal is not handled. So, handling signals is sufficient to suppress crash reports these days.


That said, it's actually pretty simple to disconnect the CrashReporter from your process using Mach routines. I had to do this for Wine on Tiger because Wine routinely provokes exceptions (and uses signal handlers to deal with the consequences) and the CrashReporter was suspending the process while it generated its report, slowing it _way_ down.

kern_return_t kret = task_set_exception_ports(
mach_task_self(),
EXC_MASK_BAD_ACCESS | EXC_MASK_BAD_INSTRUCTION | EXC_MASK_ARITHMETIC,
MACH_PORT_NULL,
EXCEPTION_STATE_IDENTITY,
MACHINE_THREAD_STATE);


I went into it in more depth here: http://lists.apple.com/archives/unix-porting/2007/Mar/msg00009.html

Regards,
Ken

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Suppressing Crash Reporter dialogs for a task
      • From: Mark Woods <email@hidden>
References: 
 >Suppressing Crash Reporter dialogs for a task (From: Mark Woods <email@hidden>)
 >Re: Suppressing Crash Reporter dialogs for a task (From: Jens Alfke <email@hidden>)
 >Re: Suppressing Crash Reporter dialogs for a task (From: Alastair Houghton <email@hidden>)

  • Prev by Date: Re: an app that never quits
  • Next by Date: Re: an app that never quits
  • Previous by thread: Re: Suppressing Crash Reporter dialogs for a task
  • Next by thread: Re: Suppressing Crash Reporter dialogs for a task
  • Index(es):
    • Date
    • Thread