libdd-crashtracker 2.0.0

Detects program crashes and reports them to datadog backend.
Documentation
# 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