@GodOfCode.: dziekuje za materiały , sugestie i uwagi, widzę że powróciłeś z banicji
Przez przypadek trafiłem na ten projekt https://github.com/ssbssa/dwarfstack i tutaj to działa np.
wynik dzialania tego przykąłdu https://github.com/ssbssa/dwarfstack/blob/master/examples/location/location.c
base address: 0x00007FF6950B0000 (location.exe)
stack 00: 0x00007FF6950B143D (obj2.c:61:3) [obj2func2]
stack 01: 0x00007FF6950B1418 (obj2.c:66:3) [obj2func]
stack 02: 0x00007FF6950B13A8 (location.c:14:3) [d]
stack 03: 0x00007FF6950B13B8 (location.c:19:3) [c]
stack 04: 0x00007FF6950B13C8 (location.c:24:3) [b]
stack 05: 0x00007FF6950B13D8 (location.c:29:3) [a]
stack 06: 0x00007FF6950B13FA (location.c:34:3) [main]
stack 07: 0x00007FF6950B1314 (crtexe.c:267:15) [__tmainCRTStartup]
stack 08: 0x00007FF6950B1365 (crtexe.c:188:9) [mainCRTStartup]
Pozostała z problemami:
- C++23 <stacktrace> = choc mam clang 16.0.5 to na Windows jeszcze to nie dotarło, nie ma tego pliku
- Boost stacktrace() = nie wyświetla ani nazw funkcji ani linii kodu na Windows
- libbacktrace , działa podobnie jak boost, czyli ani nazw funkcji ani linii kodu na Windows, a w sumie boost uzywa tej biblioteki wiec i wynik nie dziwi
-
https://github.com/Febbe/stacktrace nazwy funkcji są zagmatwane przez manglowanie ale wyświetla poprawne linie kodu (brak demanglingu) , z nie działających działa najlepiej ;)
@Marius.Maximus: Co do tego że boost stacktrace i libbacktrace nie dziala na Windowsie to się nie zgodzę. Dziś to uruchomiłem na QT 5.3.1 z MinGW 4.8.2 i Boost 1.69.0
Niestety jest to trochę pokręcone bo do działania Boost::stacktrace potrzebuje libbacktrace do wyświetlania bardziej szczegółowych informacji na Windowsie. (Gdy używamy MinGW na msvc działa z marszu)
Więcej info na ten temat tu https://www.boost.org/doc/libs/1_69_0/doc/html/stacktrace/configuration_and_build.html#ftn.stacktrace.configuration_and_build.f0
Z powyższego linku dowiadujemy się że bibliotekę Libbacktrace można zbudować na MSYS. Ja użyłem MSYS2.
Skonfigurowałem ją tak by kompilator jakiego ma użyć podczas budowania pochodził z toolsów QT, i zbudowałem bibliotekę. Potem połączyłem to z boostem tak żeby wiedział gdzie ma headery do LIbbacktrace i zaczęło hulać
Moja konsola wygląda tak:
terminate called after throwing an instance of 'std::runtime_error'
what(): test
Crashed:
0# boost::stacktrace::basic_stacktrace<std::allocatorboost::stacktrace::frame >::init(unsigned int, unsigned int) at ../boost/boost/stacktrace/stacktrace.hpp:75
1# ala() at ../stc_mingw482/main.cpp:38
2# ma() at ../stc_mingw482/main.cpp:45
3# my_signal_handler(int) at ../stc_mingw482/main.cpp:51 <<<<<< Dotąd nas interesuje
4# _imp___set_invalid_parameter_handler in C:\Windows\System32\msvcrt.dll
5# _imp___set_invalid_parameter_handler in C:\Windows\System32\msvcrt.dll
6# _imp___set_invalid_parameter_handler in C:\Qt\Qt5.3.1\5.3\mingw482_32\bin\libstdc++-6.dll
7# main at ../stc_mingw482/main.cpp:66
8# __tmainCRTStartup in D:\Projekty\stc_mingw482_qt571\build-stc_mingw482-Desktop_Qt_5_3_MinGW_32bit-Debug\debug\stc_mingw482.exe
9# _imp___set_invalid_parameter_handler in C:\Windows\System32\KERNEL32.DLL
10# _imp___set_invalid_parameter_handler in C:\Windows\SYSTEM32\ntdll.dll
11# _imp___set_invalid_parameter_handler in C:\Windows\SYSTEM32\ntdll.dll
Wszystkie nazwy wyświetlają się prawidłowo.
Sprawdzę jeszcze nowsze wersje.