mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-26 07:54:36 +00:00
Directly use RtlWalkFrameChain.
RtlCaptureStackBackTrace is just a wrapper for RtlWalkFrameChain.
This commit is contained in:
parent
19e83b434e
commit
a7ace6ef9e
@ -15,8 +15,11 @@ namespace tracy
|
|||||||
|
|
||||||
#if defined _WIN32 || defined __CYGWIN__
|
#if defined _WIN32 || defined __CYGWIN__
|
||||||
|
|
||||||
|
extern "C" t_RtlWalkFrameChain RtlWalkFrameChain = 0;
|
||||||
|
|
||||||
void InitCallstack()
|
void InitCallstack()
|
||||||
{
|
{
|
||||||
|
RtlWalkFrameChain = (t_RtlWalkFrameChain)GetProcAddress( GetModuleHandle( "ntdll.dll" ), "RtlWalkFrameChain" );
|
||||||
SymInitialize( GetCurrentProcess(), nullptr, true );
|
SymInitialize( GetCurrentProcess(), nullptr, true );
|
||||||
SymSetOptions( SYMOPT_LOAD_LINES );
|
SymSetOptions( SYMOPT_LOAD_LINES );
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,11 @@
|
|||||||
|
|
||||||
#if defined _WIN32 || defined __CYGWIN__
|
#if defined _WIN32 || defined __CYGWIN__
|
||||||
# define TRACY_HAS_CALLSTACK
|
# define TRACY_HAS_CALLSTACK
|
||||||
# ifndef MAXLONG
|
extern "C"
|
||||||
# ifdef __CYGWIN__
|
{
|
||||||
extern "C" __declspec(dllimport) unsigned short __stdcall RtlCaptureStackBackTrace( unsigned int, unsigned int, void**, unsigned int* );
|
typedef unsigned long (__stdcall *t_RtlWalkFrameChain)( void**, unsigned long, unsigned long );
|
||||||
# else
|
extern t_RtlWalkFrameChain RtlWalkFrameChain;
|
||||||
extern "C" __declspec(dllimport) unsigned short __stdcall RtlCaptureStackBackTrace( unsigned long, unsigned long, void**, unsigned long* );
|
}
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#elif defined __ANDROID__
|
#elif defined __ANDROID__
|
||||||
# define TRACY_HAS_CALLSTACK
|
# define TRACY_HAS_CALLSTACK
|
||||||
# include <unwind.h>
|
# include <unwind.h>
|
||||||
@ -49,7 +47,7 @@ static tracy_force_inline void* Callstack( int depth )
|
|||||||
assert( depth >= 1 && depth < 63 );
|
assert( depth >= 1 && depth < 63 );
|
||||||
|
|
||||||
auto trace = (uintptr_t*)tracy_malloc( ( 1 + depth ) * sizeof( uintptr_t ) );
|
auto trace = (uintptr_t*)tracy_malloc( ( 1 + depth ) * sizeof( uintptr_t ) );
|
||||||
const auto num = RtlCaptureStackBackTrace( 0, depth, (void**)( trace+1 ), nullptr );
|
const auto num = RtlWalkFrameChain( (void**)( trace + 1 ), depth, 0 );
|
||||||
*trace = num;
|
*trace = num;
|
||||||
|
|
||||||
return trace;
|
return trace;
|
||||||
|
Loading…
Reference in New Issue
Block a user