https://github.com/markusjx/stacktrace
C++ stack traces for windows, (debian based-) linux and macOs systems
https://github.com/markusjx/stacktrace
cpp developer-tools stacktrace
Last synced: 9 months ago
JSON representation
C++ stack traces for windows, (debian based-) linux and macOs systems
- Host: GitHub
- URL: https://github.com/markusjx/stacktrace
- Owner: MarkusJx
- License: gpl-3.0
- Created: 2020-09-25T14:49:19.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-09-25T13:48:20.000Z (over 3 years ago)
- Last Synced: 2025-03-27T13:39:55.026Z (10 months ago)
- Topics: cpp, developer-tools, stacktrace
- Language: C++
- Homepage:
- Size: 99.6 KB
- Stars: 7
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# stacktrace
Stack traces for windows, linux and macOs. Somewhat equal to the implementation in ``boost::stacktrace``.
Uses an edited version of the addr2line to get line numbers on linux. If you are using linux,
you must install ``binutils-dev`` and ``libiberty-dev`` in order to compile ``addr2line.c``.
## Creating stack traces
In order to create a stack trace, you may do:
```c++
#include
#include "stacktrace.hpp"
int main() {
// Create a stack trace
markusjx::stacktrace::stacktrace stacktrace;
// Print out the stack trace
std::cout << stacktrace;
return 0;
}
```
## Examples
On **windows**, stack traces may look like this (built in debug mode):
```
0# markusjx::stacktrace::stacktrace::stacktrace in stacktrace.cpp:390
1# test_1 in test.cpp:6
2# main in main.cpp:33
3# invoke_main in exe_common.inl:79
4# __scrt_common_main_seh in exe_common.inl:288
5# __scrt_common_main in exe_common.inl:331
6# mainCRTStartup in exe_main.cpp:17
```
On **linux**, stack traces may look like this:
```
0# markusjx::stacktrace::stacktrace::stacktrace(unsigned long, unsigned long) in stacktrace.cpp:405
1# test_1() in test.cpp:6
2# main in main.cpp:33
3# __libc_start_main in libc.so.6
4# 0x000055944645CAEA in stacktrace
```
On **macOs**, stack traces may look like this:
```
0# markusjx::stacktrace::stacktrace::stacktrace(unsigned long, unsigned long) in stacktrace
1# markusjx::stacktrace::stacktrace::stacktrace(unsigned long, unsigned long) in stacktrace
2# test_1() in stacktrace
3# main in stacktrace
4# start in libdyld.dylib
5# 0 ??? 0x0000000000000001 0x0 + 1
```
## Compiling
In order to compile this library, you could create a ``CMakeLists.txt`` similar to this:
```CMake
cmake_minimum_required(VERSION 3.17)
project(PROJECT_NAME)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
# On linux (and gcc) set the -g option to print
# proper function names
if (NOT WIN32 AND NOT APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
endif ()
# If the addr2line library is not used, you must:
#set(CMAKE_EXE_LINKER_FLAGS "-rdynamic")
add_executable(${PROJECT_NAME} main.cpp)
# Add this after add_executable or add_library
include(initStacktrace.cmake)
initStacktrace(${PROJECT_NAME})
```