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:
@@ -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
|
||||
|
Reference in New Issue
Block a user