Crashser - open source dump/crash server for different programming languages (used for crash analysis in various applications). This library is crossplatfrom (now only Windows, Linux, OSX) implementation C client for Crasher dump/crash server.
In order to build the library, you will need the following installed packages on your machine:
- boost
After that you can use the following commands:
cd crasher-cpp-client
mkdir build
cd build
cmake ..
You can choose target library type (static or dynamic), disabling or enabling examples with the following options for cmake:
cmake .. -DBUILD_STATIC_LIBRARY=ON -DBUILD_EXAMPLES=ON
Segmentation Faults and std::terminate calls sometimes happen in programs. Programmers usually wish to get as much information as possible on such incidents, so having a stacktrace will significantly improve debugging and fixing. So, we can you Crashser library for these purposes:
#include "crashser.h"
void my_signal_handler(int sig_number)
{
try {
// OSInfo name is determined automatically, but you can override it like below
const Crashser::OSInfo os_info("OSX", "11.2.2");
const Crashser::AppInfo app_info("test_example_app", "0.0.1");
// Getting stack trace and build core dump structure
std::string stack_trace = Crashser::getStackTrace();
Crashser::CoreDump core_dump(std::move(stack_trace), &os_info, &app_info);
// Sending core dump to Crashser collector
Crashser::DumpServerConnector connector("localhost", "8080");
connector.sendCoreDump(core_dump, [](const std::string& response_body) {
std::cout << response_body << std::endl; // onResponse - isn't an asynchronous operation
});
} catch (const std::runtime_error& e) {
std::cerr << "Error crash handling: " << e.what() << std::endl;
}
exit(EXIT_FAILURE);
}
int main(int argc, char** argv)
{
::signal(SIGSEGV, &my_signal_handler);
::raise(SIGSEGV);
return EXIT_SUCCESS;
}
Sometimes it is necessary to control the throwing of some exceptions. With Crashser library you can do it like this:
#include "crashser.h"
void functionWithUnhandledException()
{
// You can also throw exception by default and get stack trace,
// but the code below provides information about the exception in more detail
Crashser::throwWithStackTrace(std::logic_error("Unhandled exception"));
}
int main(int argc, char** argv)
{
try {
functionWithUnhandledException();
} catch (const std::exception& e) {
try {
// OSInfo name is determined automatically, but you can override it like below
const Crashser::OSInfo os_info("OSX", "11.2.2");
const Crashser::AppInfo app_info("test_example_app", "0.0.1");
// Getting stack trace from exception and build core dump structure
std::string stack_trace = Crashser::getStackTrace(e);
Crashser::CoreDump core_dump(std::move(stack_trace), &os_info, &app_info);
// Sending core dump to Crashser collector
Crashser::DumpServerConnector connector("localhost", "8080");
connector.sendCoreDump(core_dump, [](const std::string& response_body) {
std::cout << response_body << std::endl; // onResponse - isn't an asynchronous operation
});
} catch (const std::exception& e) {
std::cerr << "Error crash handling: " << e.what() << std::endl;
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
Information about license will be added later...