implemented wxStackWalker for Unix (using glibc-specific methods); moved wxUSE_STACKWALKER to common setu_inc.h

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31474 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-01-19 01:15:12 +00:00
parent e926f2efc7
commit eaff0f0d3f
13 changed files with 753 additions and 27 deletions

View File

@@ -74,6 +74,7 @@
#define TEST_SCOPEGUARD
#define TEST_SNGLINST
// #define TEST_SOCKETS --FIXME! (RN)
#define TEST_STACKWALKER
#define TEST_STDPATHS
#define TEST_STREAMS
#define TEST_TEXTSTREAM
@@ -84,7 +85,7 @@
#define TEST_WCHAR
#define TEST_ZIP
#else // #if TEST_ALL
#define TEST_DLLLOADER
#define TEST_STACKWALKER
#endif
// some tests are interactive, define this to run them
@@ -433,7 +434,7 @@ static void TestDllListLoaded()
for ( size_t n = 0; n < count; ++n )
{
const wxDynamicLibraryDetails& details = dlls[n];
printf("%-45s", details.GetPath().c_str());
printf("%-45s", details.GetPath().mb_str());
void *addr;
size_t len;
@@ -443,7 +444,7 @@ static void TestDllListLoaded()
(unsigned long)addr, (unsigned long)((char *)addr + len));
}
printf(" %s\n", details.GetVersion().c_str());
printf(" %s\n", details.GetVersion().mb_str());
}
}
@@ -2629,6 +2630,71 @@ static void TestFtpUpload()
#endif // TEST_FTP
// ----------------------------------------------------------------------------
// stack backtrace
// ----------------------------------------------------------------------------
#ifdef TEST_STACKWALKER
#include "wx/stackwalk.h"
class StackDump : public wxStackWalker
{
public:
StackDump(const char *argv0)
: wxStackWalker(argv0)
{
}
virtual void Walk()
{
wxPuts(_T("Stack dump:"));
wxStackWalker::Walk();
}
protected:
virtual void OnStackFrame(const wxStackFrame& frame)
{
printf("[%2d] ", frame.GetLevel());
wxString name = frame.GetName();
if ( !name.empty() )
{
printf("%-20.40s", name.mb_str());
}
else
{
printf("0x%08lx", (unsigned long)frame.GetAddress());
}
if ( frame.HasSourceLocation() )
{
printf("\t%s:%d",
frame.GetFileName().mb_str(),
frame.GetLine());
}
puts("");
wxString type, val;
for ( size_t n = 0; frame.GetParam(n, &type, &name, &val); n++ )
{
printf("\t%s %s = %s\n", type.mb_str(), name.mb_str(), val.mb_str());
}
}
};
static void TestStackWalk(const char *argv0)
{
wxPuts(_T("*** Testing wxStackWalker ***\n"));
StackDump dump(argv0);
dump.Walk();
}
#endif // TEST_STACKWALKER
// ----------------------------------------------------------------------------
// standard paths
// ----------------------------------------------------------------------------
@@ -4332,6 +4398,10 @@ int main(int argc, char **argv)
TestScopeGuard();
#endif
#ifdef TEST_STACKWALKER
TestStackWalk(argv[0]);
#endif // TEST_STACKWALKER
#ifdef TEST_STDPATHS
TestStandardPaths();
#endif