backtrace-inl.h 955 B

123456789101112131415161718192021222324252627282930313233343536
  1. #pragma once
  2. #ifndef BACKTRACE_INL_H_
  3. #error "Direct inclusion of this file is not allowed, include backtrace.h"
  4. // For the sake of sane code completion.
  5. #include "backtrace.h"
  6. #endif
  7. #include <util/system/compiler.h>
  8. namespace NYT::NBacktrace {
  9. ////////////////////////////////////////////////////////////////////////////////
  10. template <class TCursor>
  11. Y_NO_INLINE TBacktrace GetBacktrace(
  12. TCursor* cursor,
  13. TBacktraceBuffer buffer,
  14. int framesToSkip)
  15. {
  16. // Account for the current frame.
  17. ++framesToSkip;
  18. size_t frameCount = 0;
  19. while (frameCount < buffer.size() && !cursor->IsFinished()) {
  20. if (framesToSkip > 0) {
  21. --framesToSkip;
  22. } else {
  23. buffer[frameCount++] = cursor->GetCurrentIP();
  24. }
  25. cursor->MoveNext();
  26. }
  27. return {buffer.begin(), frameCount};
  28. }
  29. ////////////////////////////////////////////////////////////////////////////////
  30. } // namespace NYT::NBacktrace