src/unix/dlunix.cpp \
src/unix/mimetype.cpp \
src/unix/snglinst.cpp \
+ src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/threadpsx.cpp \
src/msw/basemsw.cpp \
wx/unix/execute.h \
wx/unix/mimetype.h \
wx/unix/pipe.h \
+ wx/unix/stackwalk.h \
wx/unix/stdpaths.h
@COND_PLATFORM_UNIX_1@BASE_PLATFORM_HDR = $(COND_PLATFORM_UNIX_1_BASE_PLATFORM_HDR)
COND_PLATFORM_WIN32_1_BASE_PLATFORM_HDR = \
wx/unix/execute.h \
wx/unix/mimetype.h \
wx/unix/pipe.h \
+ wx/unix/stackwalk.h \
wx/unix/stdpaths.h
@COND_TOOLKIT_COCOA@BASE_PLATFORM_HDR = $(COND_TOOLKIT_COCOA_BASE_PLATFORM_HDR)
COND_TOOLKIT_MAC_BASE_PLATFORM_HDR = \
monodll_dlunix.o \
monodll_mimetype.o \
monodll_snglinst.o \
+ monodll_stackwalk.o \
monodll_stdpaths.o \
monodll_threadpsx.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS)
monodll_dlunix.o \
monodll_mimetype.o \
monodll_snglinst.o \
+ monodll_stackwalk.o \
monodll_stdpaths.o \
monodll_threadpsx.o \
monodll_cfstring.o \
monodll_dlunix.o \
monodll_mimetype.o \
monodll_snglinst.o \
+ monodll_stackwalk.o \
monodll_stdpaths.o \
monodll_threadpsx.o \
monodll_cfstring.o \
monodll_dlunix.o \
monodll_mimetype.o \
monodll_snglinst.o \
+ monodll_stackwalk.o \
monodll_stdpaths.o \
monodll_threadpsx.o \
monodll_cfstring.o \
monodll_dlunix.o \
monodll_mimetype.o \
monodll_snglinst.o \
+ monodll_stackwalk.o \
monodll_stdpaths.o \
monodll_threadpsx.o \
monodll_cfstring.o \
monodll_dlunix.o \
monodll_mimetype.o \
monodll_snglinst.o \
+ monodll_stackwalk.o \
monodll_stdpaths.o \
monodll_threadpsx.o \
monodll_cfstring.o \
monolib_dlunix.o \
monolib_mimetype.o \
monolib_snglinst.o \
+ monolib_stackwalk.o \
monolib_stdpaths.o \
monolib_threadpsx.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_1 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1)
monolib_dlunix.o \
monolib_mimetype.o \
monolib_snglinst.o \
+ monolib_stackwalk.o \
monolib_stdpaths.o \
monolib_threadpsx.o \
monolib_cfstring.o \
monolib_dlunix.o \
monolib_mimetype.o \
monolib_snglinst.o \
+ monolib_stackwalk.o \
monolib_stdpaths.o \
monolib_threadpsx.o \
monolib_cfstring.o \
monolib_dlunix.o \
monolib_mimetype.o \
monolib_snglinst.o \
+ monolib_stackwalk.o \
monolib_stdpaths.o \
monolib_threadpsx.o \
monolib_cfstring.o \
monolib_dlunix.o \
monolib_mimetype.o \
monolib_snglinst.o \
+ monolib_stackwalk.o \
monolib_stdpaths.o \
monolib_threadpsx.o \
monolib_cfstring.o \
monolib_dlunix.o \
monolib_mimetype.o \
monolib_snglinst.o \
+ monolib_stackwalk.o \
monolib_stdpaths.o \
monolib_threadpsx.o \
monolib_cfstring.o \
basedll_dlunix.o \
basedll_mimetype.o \
basedll_snglinst.o \
+ basedll_stackwalk.o \
basedll_stdpaths.o \
basedll_threadpsx.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_2 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2)
basedll_dlunix.o \
basedll_mimetype.o \
basedll_snglinst.o \
+ basedll_stackwalk.o \
basedll_stdpaths.o \
basedll_threadpsx.o \
basedll_cfstring.o \
basedll_dlunix.o \
basedll_mimetype.o \
basedll_snglinst.o \
+ basedll_stackwalk.o \
basedll_stdpaths.o \
basedll_threadpsx.o \
basedll_cfstring.o \
basedll_dlunix.o \
basedll_mimetype.o \
basedll_snglinst.o \
+ basedll_stackwalk.o \
basedll_stdpaths.o \
basedll_threadpsx.o \
basedll_cfstring.o \
basedll_dlunix.o \
basedll_mimetype.o \
basedll_snglinst.o \
+ basedll_stackwalk.o \
basedll_stdpaths.o \
basedll_threadpsx.o \
basedll_cfstring.o \
basedll_dlunix.o \
basedll_mimetype.o \
basedll_snglinst.o \
+ basedll_stackwalk.o \
basedll_stdpaths.o \
basedll_threadpsx.o \
basedll_cfstring.o \
baselib_dlunix.o \
baselib_mimetype.o \
baselib_snglinst.o \
+ baselib_stackwalk.o \
baselib_stdpaths.o \
baselib_threadpsx.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_3 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3)
baselib_dlunix.o \
baselib_mimetype.o \
baselib_snglinst.o \
+ baselib_stackwalk.o \
baselib_stdpaths.o \
baselib_threadpsx.o \
baselib_cfstring.o \
baselib_dlunix.o \
baselib_mimetype.o \
baselib_snglinst.o \
+ baselib_stackwalk.o \
baselib_stdpaths.o \
baselib_threadpsx.o \
baselib_cfstring.o \
baselib_dlunix.o \
baselib_mimetype.o \
baselib_snglinst.o \
+ baselib_stackwalk.o \
baselib_stdpaths.o \
baselib_threadpsx.o \
baselib_cfstring.o \
baselib_dlunix.o \
baselib_mimetype.o \
baselib_snglinst.o \
+ baselib_stackwalk.o \
baselib_stdpaths.o \
baselib_threadpsx.o \
baselib_cfstring.o \
baselib_dlunix.o \
baselib_mimetype.o \
baselib_snglinst.o \
+ baselib_stackwalk.o \
baselib_stdpaths.o \
baselib_threadpsx.o \
baselib_cfstring.o \
monodll_registry.o: $(srcdir)/src/msw/registry.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
-monodll_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(MONODLL_ODEP)
- $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
-
monodll_time.o: $(srcdir)/src/msw/wince/time.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
@COND_PLATFORM_WIN32_1@monodll_snglinst.o: $(srcdir)/src/msw/snglinst.cpp $(MONODLL_ODEP)
@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+@COND_PLATFORM_UNIX_1@monodll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@monodll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@monodll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@monodll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@monodll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@monodll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
+@COND_PLATFORM_WIN32_1@monodll_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
@COND_PLATFORM_UNIX_1@monodll_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
monolib_registry.o: $(srcdir)/src/msw/registry.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
-monolib_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(MONOLIB_ODEP)
- $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
-
monolib_time.o: $(srcdir)/src/msw/wince/time.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
@COND_PLATFORM_WIN32_1@monolib_snglinst.o: $(srcdir)/src/msw/snglinst.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+@COND_PLATFORM_UNIX_1@monolib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@monolib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@monolib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@monolib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@monolib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@monolib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
+@COND_PLATFORM_WIN32_1@monolib_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
@COND_PLATFORM_UNIX_1@monolib_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
basedll_registry.o: $(srcdir)/src/msw/registry.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
-basedll_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(BASEDLL_ODEP)
- $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
-
basedll_time.o: $(srcdir)/src/msw/wince/time.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
@COND_PLATFORM_WIN32_1@basedll_snglinst.o: $(srcdir)/src/msw/snglinst.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+@COND_PLATFORM_UNIX_1@basedll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@basedll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@basedll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@basedll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@basedll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@basedll_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
+@COND_PLATFORM_WIN32_1@basedll_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
+
@COND_PLATFORM_UNIX_1@basedll_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $<
baselib_registry.o: $(srcdir)/src/msw/registry.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
-baselib_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(BASELIB_ODEP)
- $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
-
baselib_time.o: $(srcdir)/src/msw/wince/time.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
@COND_PLATFORM_WIN32_1@baselib_snglinst.o: $(srcdir)/src/msw/snglinst.cpp $(BASELIB_ODEP)
@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+@COND_PLATFORM_UNIX_1@baselib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@baselib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@baselib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@baselib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@baselib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@baselib_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
+@COND_PLATFORM_WIN32_1@baselib_stackwalk.o: $(srcdir)/src/msw/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_WIN32_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
+
@COND_PLATFORM_UNIX_1@baselib_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $<
src/unix/dlunix.cpp
src/unix/mimetype.cpp
src/unix/snglinst.cpp
+ src/unix/stackwalk.cpp
src/unix/stdpaths.cpp
src/unix/threadpsx.cpp
</set>
wx/unix/execute.h
wx/unix/mimetype.h
wx/unix/pipe.h
+ wx/unix/stackwalk.h
wx/unix/stdpaths.h
</set>
--enable-ipc use interprocess communication (wxSocket etc.)
--enable-apple_ieee use the Apple IEEE codec
--enable-catch_segvs catch signals in wxApp::OnFatalException (Unix only)
+ --enable-backtrace use wxStackWalker class for getting backtraces
--enable-cmdline use wxCmdLineParser class
--enable-datetime use wxDateTime class
--enable-dialupman use dialup network classes
DEFAULT_wxUSE_OPENGL=no
DEFAULT_wxUSE_ON_FATAL_EXCEPTION=no
+ DEFAULT_wxUSE_STACKWALKER=no
DEFAULT_wxUSE_SNGLINST_CHECKER=no
DEFAULT_wxUSE_STD_IOSTREAM=no
DEFAULT_wxUSE_CMDLINE_PARSER=no
DEFAULT_wxUSE_OPENGL=no
DEFAULT_wxUSE_ON_FATAL_EXCEPTION=yes
+ DEFAULT_wxUSE_STACKWALKER=yes
DEFAULT_wxUSE_SNGLINST_CHECKER=yes
DEFAULT_wxUSE_STD_IOSTREAM=no
DEFAULT_wxUSE_CMDLINE_PARSER=yes
fi
+ enablestring=
+ echo "$as_me:$LINENO: checking for --${enablestring:-enable}-backtrace" >&5
+echo $ECHO_N "checking for --${enablestring:-enable}-backtrace... $ECHO_C" >&6
+ no_cache=0
+ # Check whether --enable-backtrace or --disable-backtrace was given.
+if test "${enable_backtrace+set}" = set; then
+ enableval="$enable_backtrace"
+
+ if test "$enableval" = yes; then
+ ac_cv_use_backtrace='wxUSE_STACKWALKER=yes'
+ else
+ ac_cv_use_backtrace='wxUSE_STACKWALKER=no'
+ fi
+
+else
+
+ LINE=`grep "wxUSE_STACKWALKER" ${wx_arg_cache_file}`
+ if test "x$LINE" != x ; then
+ eval "DEFAULT_$LINE"
+ else
+ no_cache=1
+ fi
+
+ ac_cv_use_backtrace='wxUSE_STACKWALKER='$DEFAULT_wxUSE_STACKWALKER
+
+fi;
+
+ eval "$ac_cv_use_backtrace"
+ if test "$no_cache" != 1; then
+ echo $ac_cv_use_backtrace >> ${wx_arg_cache_file}.tmp
+ fi
+
+ if test "$wxUSE_STACKWALKER" = yes; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+
+
enablestring=
echo "$as_me:$LINENO: checking for --${enablestring:-enable}-cmdline" >&5
echo $ECHO_N "checking for --${enablestring:-enable}-cmdline... $ECHO_C" >&6
fi
fi
+if test "$wxUSE_STACKWALKER" = "yes" -a "$wxUSE_UNIX" = "yes"; then
+
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ echo "$as_me:$LINENO: checking for backtrace() in <execinfo.h>" >&5
+echo $ECHO_N "checking for backtrace() in <execinfo.h>... $ECHO_C" >&6
+if test "${wx_cv_func_backtrace+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <execinfo.h>
+int
+main ()
+{
+
+ void *trace[1];
+ char **messages;
+
+ backtrace(trace, 1);
+ messages = backtrace_symbols(trace, 1);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ wx_cv_func_backtrace=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+wx_cv_func_backtrace=no
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+fi
+echo "$as_me:$LINENO: result: $wx_cv_func_backtrace" >&5
+echo "${ECHO_T}$wx_cv_func_backtrace" >&6
+
+
+ if test "$wx_cv_func_backtrace" = "no"; then
+ { echo "$as_me:$LINENO: WARNING: backtrace() is not available, wxStackWalker will not be available" >&5
+echo "$as_me: WARNING: backtrace() is not available, wxStackWalker will not be available" >&2;}
+ wxUSE_STACKWALKER=no
+ else
+ echo "$as_me:$LINENO: checking for __cxa_demangle() in <cxxabi.h>" >&5
+echo $ECHO_N "checking for __cxa_demangle() in <cxxabi.h>... $ECHO_C" >&6
+if test "${wx_cv_func_cxa_demangle+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <cxxabi.h>
+int
+main ()
+{
+
+ int rc;
+ __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ wx_cv_func_cxa_demangle=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+wx_cv_func_cxa_demangle=no
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+fi
+echo "$as_me:$LINENO: result: $wx_cv_func_cxa_demangle" >&5
+echo "${ECHO_T}$wx_cv_func_cxa_demangle" >&6
+
+ if test "$wx_cv_func_cxa_demangle" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_CXA_DEMANGLE 1
+_ACEOF
+
+ fi
+ fi
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+
for ac_func in mkstemp mktemp
fi
+if test "$wxUSE_STACKWALKER" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define wxUSE_STACKWALKER 1
+_ACEOF
+
+fi
+
if test "$wxUSE_SNGLINST_CHECKER" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define wxUSE_SNGLINST_CHECKER 1
-
-
BAKEFILE_AUTOCONF_INC_M4_VERSION="0.1.4"
DEFAULT_wxUSE_OPENGL=no
DEFAULT_wxUSE_ON_FATAL_EXCEPTION=no
+ DEFAULT_wxUSE_STACKWALKER=no
DEFAULT_wxUSE_SNGLINST_CHECKER=no
DEFAULT_wxUSE_STD_IOSTREAM=no
DEFAULT_wxUSE_CMDLINE_PARSER=no
DEFAULT_wxUSE_OPENGL=no
DEFAULT_wxUSE_ON_FATAL_EXCEPTION=yes
+ DEFAULT_wxUSE_STACKWALKER=yes
DEFAULT_wxUSE_SNGLINST_CHECKER=yes
DEFAULT_wxUSE_STD_IOSTREAM=no
DEFAULT_wxUSE_CMDLINE_PARSER=yes
dnl please keep the settings below in alphabetical order
WX_ARG_ENABLE(apple_ieee, [ --enable-apple_ieee use the Apple IEEE codec], wxUSE_APPLE_IEEE)
WX_ARG_ENABLE(catch_segvs, [ --enable-catch_segvs catch signals in wxApp::OnFatalException (Unix only)], wxUSE_ON_FATAL_EXCEPTION)
+WX_ARG_ENABLE(backtrace, [ --enable-backtrace use wxStackWalker class for getting backtraces], wxUSE_STACKWALKER)
WX_ARG_ENABLE(cmdline, [ --enable-cmdline use wxCmdLineParser class], wxUSE_CMDLINE_PARSER)
WX_ARG_ENABLE(datetime, [ --enable-datetime use wxDateTime class], wxUSE_DATETIME)
WX_ARG_ENABLE(dialupman, [ --enable-dialupman use dialup network classes], wxUSE_DIALUP_MANAGER)
fi
fi
+dnl backtrace() and backtrace_symbols() for wxStackWalker
+if test "$wxUSE_STACKWALKER" = "yes" -a "$wxUSE_UNIX" = "yes"; then
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ AC_CACHE_CHECK([for backtrace() in <execinfo.h>], wx_cv_func_backtrace,
+ [
+ AC_TRY_COMPILE([#include <execinfo.h>],
+ [
+ void *trace[1];
+ char **messages;
+
+ backtrace(trace, 1);
+ messages = backtrace_symbols(trace, 1);
+ ],
+ wx_cv_func_backtrace=yes,
+ wx_cv_func_backtrace=no
+ )
+ ]
+ )
+
+
+ if test "$wx_cv_func_backtrace" = "no"; then
+ AC_MSG_WARN([backtrace() is not available, wxStackWalker will not be available])
+ wxUSE_STACKWALKER=no
+ else
+ AC_CACHE_CHECK([for __cxa_demangle() in <cxxabi.h>], wx_cv_func_cxa_demangle,
+ [
+ AC_TRY_COMPILE([#include <cxxabi.h>],
+ [
+ int rc;
+ __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc);
+ ],
+ wx_cv_func_cxa_demangle=yes,
+ wx_cv_func_cxa_demangle=no
+ )
+ ]
+ )
+
+ if test "$wx_cv_func_cxa_demangle" = "yes"; then
+ AC_DEFINE(HAVE_CXA_DEMANGLE)
+ fi
+ fi
+
+ AC_LANG_RESTORE
+fi
+
dnl check for the function for temp files creation
AC_CHECK_FUNCS(mkstemp mktemp, break)
AC_DEFINE(wxUSE_ON_FATAL_EXCEPTION)
fi
+if test "$wxUSE_STACKWALKER" = "yes"; then
+ AC_DEFINE(wxUSE_STACKWALKER)
+fi
+
if test "$wxUSE_SNGLINST_CHECKER" = "yes"; then
AC_DEFINE(wxUSE_SNGLINST_CHECKER)
fi
#define wxUSE_ON_FATAL_EXCEPTION 0
#endif
+// Set this to 1 to be able to generate a human-readable (unlike
+// machine-readable minidumop created by wxCrashReport::Generate()) stack back
+// trace when your program crashes using wxStackWalker
+//
+// Default is 1 if supported by the compiler.
+//
+// Recommended setting: 1, set to 0 if your programs never crash
+#define wxUSE_STACKWALKER 1
+
// ----------------------------------------------------------------------------
// Unicode support
// ----------------------------------------------------------------------------
#undef wxUSE_STD_IOSTREAM
#define wxUSE_STD_IOSTREAM 1
+
+ #undef wxUSE_STACKWALKER
+ #define wxUSE_STACKWALKER 0
#endif
// things not implemented under Mac
#define wxUSE_ON_FATAL_EXCEPTION 0
#endif
+// Set this to 1 to be able to generate a human-readable (unlike
+// machine-readable minidumop created by wxCrashReport::Generate()) stack back
+// trace when your program crashes using wxStackWalker
+//
+// Default is 1 if supported by the compiler.
+//
+// Recommended setting: 1, set to 0 if your programs never crash
+#define wxUSE_STACKWALKER 1
+
// ----------------------------------------------------------------------------
// Unicode support
// ----------------------------------------------------------------------------
// Recommended setting: 1, set to 0 if your programs never crash
#define wxUSE_CRASHREPORT 1
-// Set this to 1 to be able to generate a human-readable (unlike
-// machine-readable minidumop created by wxCrashReport::Generate()) stack back
-// trace when your program crashes using wxStackWalker
-//
-// Default is 1 if supported by the compiler.
-//
-// Recommended setting: 1, set to 0 if your programs never crash
-#define wxUSE_STACKWALKER 1
-
// ----------------------------------------------------------------------------
// obsolete settings
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxStackWalker : public wxStackWalkerBase
{
public:
- wxStackWalker() { }
+ // we don't use ctor argument, it is for compatibility with Unix version
+ // only
+ wxStackWalker(const char * WXUNUSED(argv0) = NULL) { }
virtual void Walk(size_t skip = 1);
virtual void WalkFromException();
#define wxUSE_ON_FATAL_EXCEPTION 0
#endif
+// Set this to 1 to be able to generate a human-readable (unlike
+// machine-readable minidumop created by wxCrashReport::Generate()) stack back
+// trace when your program crashes using wxStackWalker
+//
+// Default is 1 if supported by the compiler.
+//
+// Recommended setting: 1, set to 0 if your programs never crash
+#define wxUSE_STACKWALKER 1
+
// ----------------------------------------------------------------------------
// Unicode support
// ----------------------------------------------------------------------------
// return the instruction pointer offset from the start of the function
size_t GetOffset() const { ConstCast()->OnGetName(); return m_offset; }
+ // get the module this function belongs to (not always available)
+ wxString GetModule() const { ConstCast()->OnGetName(); return m_module; }
+
// return true if we have the filename and line number for this frame
bool HasSourceLocation() const { return !GetFileName().empty(); }
size_t m_level;
wxString m_name,
+ m_module,
m_filename;
+
size_t m_line;
void *m_address;
// ctor does nothing, use Walk() to walk the stack
wxStackWalkerBase() { }
+ // dtor does nothing neither but should be virtual
+ virtual ~wxStackWalkerBase() { }
+
// enumerate stack frames from the current location, skipping the initial
// number of them (this can be useful when Walk() is called from some known
// location and you don't want to see the first few frames anyhow; also
#ifdef __WXMSW__
#include "wx/msw/stackwalk.h"
+#elif defined(__UNIX__)
+ #include "wx/unix/stackwalk.h"
+#else
+ #error "wxStackWalker is not supported, set wxUSE_STACKWALKER to 0"
#endif
#endif // wxUSE_STACKWALKER
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/unix/stackwalk.h
+// Purpose: declaration of wxStackWalker for Unix
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 2005-01-19
+// RCS-ID: $Id$
+// 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
+{
+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, void *address, const char *syminfo)
+ : wxStackFrameBase(level, address)
+ {
+ m_hasName =
+ m_hasLocation = false;
+
+ m_syminfo = syminfo;
+ }
+
+protected:
+ virtual void OnGetName();
+ virtual void OnGetLocation();
+
+private:
+ const char *m_syminfo;
+
+ bool m_hasName,
+ m_hasLocation;
+};
+
+// ----------------------------------------------------------------------------
+// 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 = argv0; }
+
+ virtual void Walk(size_t skip = 1);
+ virtual void WalkFromException() { Walk(2); }
+
+ static const wxString& GetExePath() { return ms_exepath; }
+
+private:
+ static wxString ms_exepath;
+};
+
+#endif // _WX_UNIX_STACKWALK_H_
#define TEST_SCOPEGUARD
#define TEST_SNGLINST
// #define TEST_SOCKETS --FIXME! (RN)
+ #define TEST_STACKWALKER
#define TEST_STDPATHS
#define TEST_STREAMS
#define TEST_TEXTSTREAM
#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
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;
(unsigned long)addr, (unsigned long)((char *)addr + len));
}
- printf(" %s\n", details.GetVersion().c_str());
+ printf(" %s\n", details.GetVersion().mb_str());
}
}
#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
// ----------------------------------------------------------------------------
TestScopeGuard();
#endif
+#ifdef TEST_STACKWALKER
+ TestStackWalk(argv[0]);
+#endif // TEST_STACKWALKER
+
#ifdef TEST_STDPATHS
TestStandardPaths();
#endif
#define wxUSE_ON_FATAL_EXCEPTION 0
#endif
+#define wxUSE_STACKWALKER 0
+
#ifndef wxUSE_UNICODE
#define wxUSE_UNICODE 0
/* Define if you have pw_gecos field in struct passwd */
#undef HAVE_PW_GECOS
+/* Define if you have __cxa_demangle() in <cxxabi.h> */
+#undef HAVE_CXA_DEMANGLE
+
/* Define if you have dlopen() */
#undef HAVE_DLOPEN
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: msw/stackwalk.cpp
+// Purpose: wxStackWalker implementation for Unix/glibc
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 2005-01-18
+// RCS-ID: $Id$
+// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#if wxUSE_STACKWALKER
+
+#ifndef WX_PRECOMP
+ #include "wx/string.h"
+#endif
+
+#include "wx/stackwalk.h"
+
+#include <execinfo.h>
+
+#ifdef HAVE_CXA_DEMANGLE
+ #include <cxxabi.h>
+#endif // HAVE_CXA_DEMANGLE
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+wxString wxStackWalker::ms_exepath;
+
+// ----------------------------------------------------------------------------
+// wxStackFrame
+// ----------------------------------------------------------------------------
+
+void wxStackFrame::OnGetName()
+{
+ if ( m_hasName )
+ return;
+
+ m_hasName = true;
+
+ // try addr2line first because it always gives us demangled names (even if
+ // __cxa_demangle is not available) and because it seems less error-prone
+ // when it works, backtrace_symbols() sometimes returns incorrect results
+ OnGetLocation();
+
+ // format is: "module(funcname+offset) [address]" but the part in
+ // parentheses can be not present
+ wxString syminfo = wxString::FromAscii(m_syminfo);
+ const size_t posOpen = syminfo.find(_T('('));
+ if ( posOpen != wxString::npos )
+ {
+ const size_t posPlus = syminfo.find(_T('+'), posOpen + 1);
+ if ( posPlus != wxString::npos )
+ {
+ const size_t posClose = syminfo.find(_T(')'), posPlus + 1);
+ if ( posClose != wxString::npos )
+ {
+ if ( m_name.empty() )
+ {
+ m_name.assign(syminfo, posOpen + 1, posPlus - posOpen - 1);
+
+#ifdef HAVE_CXA_DEMANGLE
+ int rc = -1;
+ char *cppfunc = __cxxabiv1::__cxa_demangle
+ (
+ m_name.mb_str(),
+ NULL, // output buffer (none, alloc it)
+ NULL, // [out] len of output buffer
+ &rc
+ );
+ if ( rc == 0 )
+ m_name = wxString::FromAscii(cppfunc);
+
+ free(cppfunc);
+#endif // HAVE_CXA_DEMANGLE
+ }
+
+ unsigned long ofs;
+ if ( wxString(syminfo, posPlus + 1, posClose - posPlus - 1).
+ ToULong(&ofs, 0) )
+ m_offset = ofs;
+ }
+ }
+ }
+
+ m_module.assign(syminfo, posOpen);
+}
+
+void wxStackFrame::OnGetLocation()
+{
+ if ( m_hasLocation )
+ return;
+
+ m_hasLocation = true;
+
+ // we need to launch addr2line tool to get this information and we need to
+ // have the program name for this
+ wxString exepath = wxStackWalker::GetExePath();
+ if ( exepath.empty() )
+ {
+ if ( !wxTheApp || !wxTheApp->argv )
+ return;
+ exepath = wxTheApp->argv[0];
+ }
+
+ wxArrayString output;
+ wxLogNull noLog;
+ if ( wxExecute(wxString::Format(_T("addr2line -C -f -e \"%s\" %p"),
+ exepath.c_str(),
+ m_address), output) == 0 )
+ {
+ if ( output.GetCount() != 2 )
+ {
+ wxLogDebug(_T("Unexpected addr2line output."));
+ }
+ else // 1st line has function name, 2nd one -- the file/line info
+ {
+ if ( GetName().empty() )
+ {
+ m_name = output[0];
+ if ( m_name == _T("??") )
+ m_name.clear();
+ }
+
+ const size_t posColon = output[1].find(_T(':'));
+ if ( posColon != wxString::npos )
+ {
+ m_filename.assign(output[1], 0, posColon);
+ if ( m_filename == _T("??") )
+ {
+ m_filename.clear();
+ }
+ else
+ {
+ unsigned long line;
+ if ( wxString(output[1], posColon + 1, wxString::npos).
+ ToULong(&line) )
+ m_line = line;
+ }
+ }
+ else
+ {
+ wxLogDebug(_T("Unexpected addr2line format: \"%s\""),
+ output[1].c_str());
+ }
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// wxStackWalker
+// ----------------------------------------------------------------------------
+
+void wxStackWalker::Walk(size_t skip)
+{
+ // that many frames should be enough for everyone
+ void *addresses[200];
+
+ int depth = backtrace(addresses, WXSIZEOF(addresses));
+ if ( !depth )
+ return;
+
+ char **symbols = backtrace_symbols(addresses, depth);
+
+ for ( int n = 0; n < depth; n++ )
+ {
+ wxStackFrame frame(n, addresses[n], symbols[n]);
+ OnStackFrame(frame);
+ }
+}
+
+#endif // wxUSE_STACKWALKER