<!--
{
  "documentType" : "article",
  "framework" : "Xcode",
  "identifier" : "/documentation/Xcode/SIGABRT",
  "metadataVersion" : "0.1.0",
  "role" : "article",
  "title" : "EXC_CRASH (SIGABRT)"
}
-->

# EXC_CRASH (SIGABRT)

The process terminated because it received an abort signal.

## Discussion

Typically, the `SIGABRT` signal is sent because
the process called the `abort()` function,
such as when an app encounters an uncaught Objective-C or C++ language exception.
[Addressing language exception crashes](/documentation/Xcode/addressing-language-exception-crashes) explains how to handle uncaught language
exceptions in more detail.
This signal can also come from another process
that has the privileges to manage this process’ lifetime,
and sent a `SIGABRT` because this process misbehaved in a detectable manner.

If the signal wasn’t sent because of a language exception,
look at the crashed thread’s backtrace
to determine if code in the process called `abort()`.
For more information about the `abort()` function from the C standard library,
enter `man 3 abort` in Terminal to view the `abort(3)` man page.

If an app extension takes too much time to initialize,
the operating system sends a `SIGABRT` to the app extension process.
These crashes include an `Exception Subtype` field with the value `LAUNCH_HANG`.
Because extensions don’t have a `main` function,
any time spent initializing occurs within static constructors
and <doc://com.apple.documentation/documentation/ObjectiveC/NSObject-swift.class/load()> methods
that are present in your extension and dependent libraries.
Although the exception information is different in a watchdog termination,
investigate the `LAUNCH_HANG`
using the same techniques discussed in [Addressing watchdog terminations](/documentation/Xcode/addressing-watchdog-terminations).

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)