Native
The Sentry Native SDK is intended for C and C++. However, since it builds as a dynamic library and exposes C-bindings, it can be used by any language that supports interoperability with C, such as the Foreign Function Interface (FFI).
Sentry also offers higher-level SDKs for platforms with built-in support for native crashes:
On this page, we get you up and running with Sentry's SDK, so that it will automatically report errors and exceptions in your application.
Using a framework?
Get started using a guide listed in the right sidebar.
Don't already have an account and Sentry project established? Head over to sentry.io, then return to this page.
Install
Sentry captures data by using an SDK within your application’s runtime.
The Native SDK currently supports Windows, macOS, Linux, and Android.
To build the SDK, download the latest sources from the Releases page. The SDK is managed as a CMake project, which additionally supports several configuration options, such as the backend to use.
For example, CMake
can be used like this (on macOS):
# configure the cmake build into the `build` directory, with crashpad (on macOS)
cmake -B build -D SENTRY_BACKEND=crashpad --config RelWithDebInfo -S .
# build the project
cmake --build build --config RelWithDebInfo --parallel
# install the resulting artifacts into a specific prefix
cmake --install build --prefix install
# which will result in the following (on macOS):
exa --tree install --level 2
install
├── bin
│ └── crashpad_handler
├── include
│ └── sentry.h
└── lib
├── cmake
├── libsentry.dylib
└── libsentry.dylib.dSYM
Bundling crashpad_handler
When using the Crashpad backend, which is the default on Windows and macOS, the crashpad_handler
binary has to be shipped alongside the application binary. See the Crashpad documentation for more information.
Configure
Configuration should happen as early as possible in your application's lifecycle.
#include <sentry.h>
int main(void) {
sentry_options_t *options = sentry_options_new();
sentry_options_set_dsn(options, "https://examplePublicKey@o0.ingest.sentry.io/0");
sentry_options_set_release(options, "my-project-name@2.3.12");
sentry_init(options);
/* ... */
// make sure everything flushes
sentry_close();
}
Alternatively, the DSN can be passed as SENTRY_DSN
environment variable during runtime. This can be especially useful for server applications.
Warning
Calling sentry_close()
before exiting the application is critical. It
ensures that events can be sent to Sentry before execution stops. Otherwise,
event data may be lost.
Verify
This snippet includes an intentional error, so you can test that everything is working as soon as you set it up:
The quickest way to verify Sentry in your Native application is by capturing a message:
sentry_capture_event(sentry_value_new_message_event(
/* level */ SENTRY_LEVEL_INFO,
/* logger */ "custom",
/* message */ "It works!"
));
Learn more about manually capturing an error or message in our Usage documentation.
To view and resolve the recorded error, log into sentry.io and open your project. Clicking on the error's title will open a page where you can see detailed information and mark it as resolved.
- Package:
- github:getsentry/sentry-native
- Version:
- 0.7.8
- Repository:
- https://github.com/getsentry/sentry-native