]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/console/console.cpp
Enhanced stock labels usage. Source cleaning.
[wxWidgets.git] / samples / console / console.cpp
index af40ac2e2c3973363cf09de17d579806c7903609..1ad703cabdcde96d9960f714ddc0d344680066bd 100644 (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
@@ -388,7 +389,7 @@ static void TestDllLoad()
     #error "don't know how to test wxDllLoader on this platform"
 #endif
 
-    wxPuts(_T("*** testing wxDllLoader ***\n"));
+    wxPuts(_T("*** testing basic wxDynamicLibrary functions ***\n"));
 
     wxDynamicLibrary lib(LIB_NAME);
     if ( !lib.IsLoaded() )
@@ -421,6 +422,34 @@ static void TestDllLoad()
     }
 }
 
+#if defined(__WXMSW__) || defined(__UNIX__)
+
+static void TestDllListLoaded()
+{
+    wxPuts(_T("*** testing wxDynamicLibrary::ListLoaded() ***\n"));
+
+    puts("\nLoaded modules:");
+    wxDynamicLibraryDetailsArray dlls = wxDynamicLibrary::ListLoaded();
+    const size_t count = dlls.GetCount();
+    for ( size_t n = 0; n < count; ++n )
+    {
+        const wxDynamicLibraryDetails& details = dlls[n];
+        printf("%-45s", details.GetPath().mb_str());
+
+        void *addr;
+        size_t len;
+        if ( details.GetAddress(&addr, &len) )
+        {
+            printf(" %08lx:%08lx",
+                   (unsigned long)addr, (unsigned long)((char *)addr + len));
+        }
+
+        printf(" %s\n", details.GetVersion().mb_str());
+    }
+}
+
+#endif
+
 #endif // TEST_DLLLOADER
 
 // ----------------------------------------------------------------------------
@@ -2601,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
 // ----------------------------------------------------------------------------
@@ -4096,6 +4190,7 @@ int main(int argc, char **argv)
 
 #ifdef TEST_DLLLOADER
     TestDllLoad();
+    TestDllListLoaded();
 #endif // TEST_DLLLOADER
 
 #ifdef TEST_ENVIRON
@@ -4303,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