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:
Peter Johnson
2019-08-12 23:45:45 -07:00
committed by GitHub
parent ef037457e5
commit f1d71da8a9
15 changed files with 1809 additions and 73 deletions

View 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