123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #pragma once
- #include <stdint.h>
- #include <vector>
- #include "il2cpp-config.h"
- #include "il2cpp-metadata.h"
- #if IL2CPP_TINY_DEBUGGER
- #include <string>
- #endif
- #if IL2CPP_ENABLE_NATIVE_STACKTRACES
- struct MethodDefinitionKey
- {
- Il2CppMethodPointer method;
- MethodIndex methodIndex;
- };
- #endif
- namespace il2cpp
- {
- namespace vm
- {
- typedef std::vector<Il2CppStackFrameInfo> StackFrames;
- class LIBIL2CPP_CODEGEN_API StackTrace
- {
- public:
- static void InitializeStackTracesForCurrentThread();
- static void CleanupStackTracesForCurrentThread();
- #if IL2CPP_TINY_DEBUGGER
- static std::string GetStackTrace();
- #endif
- // Current thread functions
- static const StackFrames* GetStackFrames();
- static const StackFrames* GetCachedStackFrames(int32_t depth);
- static bool GetStackFrameAt(int32_t depth, Il2CppStackFrameInfo& frame);
- static void WalkFrameStack(Il2CppFrameWalkFunc callback, void* context);
- inline static size_t GetStackDepth() { return GetStackFrames()->size(); }
- inline static bool GetTopStackFrame(Il2CppStackFrameInfo& frame) { return GetStackFrameAt(0, frame); }
- static void PushFrame(Il2CppStackFrameInfo& frame);
- static void PopFrame();
- static const void* GetStackPointer();
- // Remote thread functions
- static bool GetThreadStackFrameAt(Il2CppThread* thread, int32_t depth, Il2CppStackFrameInfo& frame);
- static void WalkThreadFrameStack(Il2CppThread* thread, Il2CppFrameWalkFunc callback, void* context);
- static int32_t GetThreadStackDepth(Il2CppThread* thread);
- static bool GetThreadTopStackFrame(Il2CppThread* thread, Il2CppStackFrameInfo& frame);
- };
- }
- }
|