mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-29 00:59:44 -06:00
Import r67258 of the wxWidgets trunk, which I expect will before
long become wxWidgets 2.9.2, which in turn is expected to be the last 2.9 release before the 3.0 stable release. Since the full wxWidgets distribution is rather large, I have imported only the parts that we use, on a subdirectory basis: art include/wx/*.* include/wx/aui include/wx/cocoa include/wx/generic include/wx/gtk include/wx/meta include/wx/msw include/wx/osx include/wx/persist include/wx/private include/wx/protocol include/wx/unix src/aui src/common src/generic src/gtk src/msw src/osx src/unix git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7380 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
99
Externals/wxWidgets3/include/wx/unix/stackwalk.h
vendored
Normal file
99
Externals/wxWidgets3/include/wx/unix/stackwalk.h
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/unix/stackwalk.h
|
||||
// Purpose: declaration of wxStackWalker for Unix
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Created: 2005-01-19
|
||||
// RCS-ID: $Id: stackwalk.h 58093 2009-01-14 14:38:00Z FM $
|
||||
// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_UNIX_STACKWALK_H_
|
||||
#define _WX_UNIX_STACKWALK_H_
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxStackFrame
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_BASE wxStackFrame : public wxStackFrameBase
|
||||
{
|
||||
friend class wxStackWalker;
|
||||
|
||||
public:
|
||||
// arguments are the stack depth of this frame, its address and the return
|
||||
// value of backtrace_symbols() for it
|
||||
//
|
||||
// NB: we don't copy syminfo pointer so it should have lifetime at least as
|
||||
// long as ours
|
||||
wxStackFrame(size_t level = 0, void *address = NULL, const char *syminfo = NULL)
|
||||
: wxStackFrameBase(level, address)
|
||||
{
|
||||
m_syminfo = syminfo;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void OnGetName();
|
||||
|
||||
// optimized for the 2 step initialization done by wxStackWalker
|
||||
void Set(const wxString &name, const wxString &filename, const char* syminfo,
|
||||
size_t level, size_t numLine, void *address)
|
||||
{
|
||||
m_level = level;
|
||||
m_name = name;
|
||||
m_filename = filename;
|
||||
m_syminfo = syminfo;
|
||||
|
||||
m_line = numLine;
|
||||
m_address = address;
|
||||
}
|
||||
|
||||
private:
|
||||
const char *m_syminfo;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxStackWalker
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_BASE wxStackWalker : public wxStackWalkerBase
|
||||
{
|
||||
public:
|
||||
// we need the full path to the program executable to be able to use
|
||||
// addr2line, normally we can retrieve it from wxTheApp but if wxTheApp
|
||||
// doesn't exist or doesn't have the correct value, the path may be given
|
||||
// explicitly
|
||||
wxStackWalker(const char *argv0 = NULL)
|
||||
{
|
||||
ms_exepath = wxString::FromAscii(argv0);
|
||||
}
|
||||
|
||||
~wxStackWalker()
|
||||
{
|
||||
FreeStack();
|
||||
}
|
||||
|
||||
virtual void Walk(size_t skip = 1, size_t maxDepth = wxSTACKWALKER_MAX_DEPTH);
|
||||
#if wxUSE_ON_FATAL_EXCEPTION
|
||||
virtual void WalkFromException(size_t maxDepth = wxSTACKWALKER_MAX_DEPTH) { Walk(2, maxDepth); }
|
||||
#endif // wxUSE_ON_FATAL_EXCEPTION
|
||||
|
||||
static const wxString& GetExePath() { return ms_exepath; }
|
||||
|
||||
|
||||
// these two may be used to save the stack at some point (fast operation)
|
||||
// and then process it later (slow operation)
|
||||
void SaveStack(size_t maxDepth);
|
||||
void ProcessFrames(size_t skip);
|
||||
void FreeStack();
|
||||
|
||||
private:
|
||||
int InitFrames(wxStackFrame *arr, size_t n, void **addresses, char **syminfo);
|
||||
|
||||
static wxString ms_exepath;
|
||||
static void *ms_addresses[];
|
||||
static char **ms_symbols;
|
||||
static int m_depth;
|
||||
};
|
||||
|
||||
#endif // _WX_UNIX_STACKWALK_H_
|
Reference in New Issue
Block a user