mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-25 01:41:43 +00:00
Move GetStackTrace and Demangle to wpiutil, add Windows support (#1819)
For Windows, import the StackWalker source (https://github.com/JochenKalmbach/StackWalker) plus PR 35 in that repo, with a few simplifications to StackWalker.h.
This commit is contained in:
45
wpiutil/src/main/native/windows/StackTrace.cpp
Normal file
45
wpiutil/src/main/native/windows/StackTrace.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2008-2019 FIRST. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "wpi/StackTrace.h"
|
||||
|
||||
#include "StackWalker.h"
|
||||
#include "wpi/ConvertUTF.h"
|
||||
#include "wpi/SmallString.h"
|
||||
|
||||
namespace {
|
||||
class StackTraceWalker : public StackWalker {
|
||||
public:
|
||||
explicit StackTraceWalker(std::string& output) : m_output(output) {}
|
||||
|
||||
void OnOutput(LPCTSTR szText) override;
|
||||
|
||||
private:
|
||||
std::string& m_output;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
void StackTraceWalker::OnOutput(LPCTSTR szText) {
|
||||
#ifdef _UNICODE
|
||||
wpi::SmallString<128> utf8;
|
||||
wpi::sys::windows::UTF16ToUTF8(szText, wcslen(szText), utf8);
|
||||
m_output.append(utf8.data(), utf8.size());
|
||||
#else
|
||||
m_output.append(szText);
|
||||
#endif
|
||||
}
|
||||
|
||||
namespace wpi {
|
||||
|
||||
std::string GetStackTrace(int offset) {
|
||||
// TODO: implement offset
|
||||
std::string output;
|
||||
StackTraceWalker walker(output);
|
||||
return output;
|
||||
}
|
||||
|
||||
} // namespace wpi
|
||||
Reference in New Issue
Block a user