12345678910111213141516171819202122232425262728293031323334 |
- #include "il2cpp-config.h"
- #include "StackTrace.h"
- namespace il2cpp
- {
- namespace os
- {
- static Il2CppBacktraceFunc s_StackBacktraceFunc = 0;
- void StackTrace::WalkStack(WalkStackCallback callback, void* context, WalkOrder walkOrder)
- {
- if (s_StackBacktraceFunc == 0)
- {
- StackTrace::WalkStackNative(callback, context, walkOrder);
- return;
- }
- const int kMaxStackFrames = 128;
- Il2CppMethodPointer addrs[kMaxStackFrames];
- size_t size = s_StackBacktraceFunc(addrs, kMaxStackFrames);
- for (size_t i = 0; i < size; ++i)
- {
- const size_t index = (walkOrder == os::StackTrace::kFirstCalledToLastCalled) ? (size - i - 1) : i;
- if (!callback(addrs[index], context))
- break;
- }
- }
- void StackTrace::OverrideStackBacktrace(Il2CppBacktraceFunc stackBacktraceFunc)
- {
- s_StackBacktraceFunc = stackBacktraceFunc;
- }
- }
- }
|