[wpiutil] StackTrace: Add ability to override default implementation (#3951)

This commit is contained in:
Peter Johnson
2022-01-21 17:22:41 -08:00
committed by GitHub
parent 78d0bcf49d
commit a467392cbd
4 changed files with 34 additions and 2 deletions

View File

@@ -0,0 +1,18 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include <atomic>
#include "wpi/StackTrace.h"
static std::atomic<std::string (*)(int offset)> gStackTraceImpl{
wpi::GetStackTraceDefault};
std::string wpi::GetStackTrace(int offset) {
return (gStackTraceImpl.load())(offset);
}
void wpi::SetGetStackTraceImpl(std::string (*func)(int offset)) {
gStackTraceImpl = func ? func : wpi::GetStackTraceDefault;
}

View File

@@ -16,6 +16,20 @@ namespace wpi {
*/
std::string GetStackTrace(int offset);
/**
* The default implementation used for GetStackTrace().
*
* @param offset The number of symbols at the top of the stack to ignore
*/
std::string GetStackTraceDefault(int offset);
/**
* Set the implementation used by GetStackTrace().
*
* @param func Function called by GetStackTrace().
*/
void SetGetStackTraceImpl(std::string (*func)(int offset));
} // namespace wpi
#endif // WPIUTIL_WPI_STACKTRACE_H_

View File

@@ -13,7 +13,7 @@
namespace wpi {
std::string GetStackTrace(int offset) {
std::string GetStackTraceDefault(int offset) {
void* stackTrace[128];
int stackSize = backtrace(stackTrace, 128);
char** mangledSymbols = backtrace_symbols(stackTrace, stackSize);

View File

@@ -32,7 +32,7 @@ void StackTraceWalker::OnOutput(LPCTSTR szText) {
namespace wpi {
std::string GetStackTrace(int offset) {
std::string GetStackTraceDefault(int offset) {
// TODO: implement offset
std::string output;
StackTraceWalker walker(output);