# Libdatadog Crashtracker
This module implements a crash tracker that enables libdatadog using profilers to send crash-reports to the datadog backend.
It has three related parts:
1. A `CrashInfo` struct which stores information about a crash in a structured format, and has built-in functions to upload itself to the datadog backend.
This struct can be generated by the crash-handlers described below (e.g. for python or Ruby), or by language runtime tools from a crash dump (e.g. .Net).
2. A UNIX crash-handler, which registers signal handlers to detect crashes.
The legal operations within a crash-handler are limited, so the handler does as much out of process as possible.
When a crash occurs, this handler collects relevant information, and puts it on a pipe to the receiver, which processes it out of process.
3. A binary application `libdatadog-crashtracking-receiver`, which receives the crash-report over a pipe and formats it for transmission to the backend.
## How to use the crashhandler
1. Initilize it using `ddog_crasht_init`
2. After a fork, reset the crashtracker in the child using `ddog_crasht_update_on_fork`.
This can be done in an `pthread_atfork` handler.
2. [Optional]. The crash-tracker can be shutdown, and the previous crash handler restored, using `ddog_crasht_shutdown`.
Currently, there is a state machine that stops you from then restarting the crash-tracker.
Fixing this is a todo
## Todos
- [ ] Support windows
- [ ] API for generating crash report externally.
- [ ] Instrumentation Telemetry support
- [ ] Enable multiple shutdown/restart cycles for crashtracker
- [ ] Enable dynamic update of metadata/configuration
## How to configure crashtracking