Index: src/Helpers/Assert.cpp
===================================================================
--- src/Helpers/Assert.cpp	(revision 796aa6109f3bcda0d0023cb6b215cc697b7f10b4)
+++ src/Helpers/Assert.cpp	(revision 90aeb9429ecb7ac9202ee9810aa2ed003e1612f8)
@@ -46,4 +46,10 @@
 #ifndef NDEBUG
 
+#ifdef __GNUC__
+#include <cstdlib>
+#include <execinfo.h>
+#include <cxxabi.h>
+#endif
+
 Assert::Action Assert::_my_assert::defaultAction = Ask;
 std::vector<Assert::hook_t> Assert::_my_assert::hooks;
@@ -52,5 +58,4 @@
 const char* Assert::_wrapper::message_ptr = "source pointer did not point to object of desired type";
 const char* Assert::_wrapper::message_ref = "source reference did not contain object of desired type";
-
 
 bool Assert::_my_assert::check(const bool res,
@@ -67,5 +72,9 @@
       char choice;
       if(defaultAction==Assert::Ask) {
+#ifdef __GNUC__
+        cout << "Please choose: (a)bort, (t)hrow execption, show (b)actrace, (i)gnore, al(w)ays ignore" << endl;
+#else
         cout << "Please choose: (a)bort, (t)hrow execption, (i)gnore, al(w)ays ignore" << endl;
+#endif /* __GNUC__ */
         cin >> choice;
       }
@@ -80,4 +89,9 @@
           throw AssertionFailure(condition,filename,line,message);
           break;
+#ifdef __GNUC__
+        case 'b':
+          Assert::_my_assert::backtrace(filename,line);
+         break;
+#endif /* __GNUC__ */
         case 'w':
           ignore = true;
@@ -92,4 +106,65 @@
 }
 
+#ifdef __GNUC__
+void Assert::_my_assert::backtrace(const char *file, int line){
+  const size_t max_depth = 100;
+  void* stack_addrs[max_depth];
+  size_t stack_depth;
+  char **stack_strings=0;
+  const char *func_name=0;
+  size_t sz = 64;
+
+  // get the backtrace
+  stack_depth   = ::backtrace(stack_addrs,max_depth);
+  stack_strings = backtrace_symbols(stack_addrs, stack_depth);
+  // used later for demangling
+  // reserved here, so we can free it unconditionally
+  char *dm_function = static_cast<char*>(malloc(sz));
+  if(!dm_function){
+    // malloc failed... we are out of luck
+    cout << "cannot provide stack trace due to exhausted memory" << endl;
+    return;
+  }
+
+  cout << "Backtrace from  " << file << "@" << line << ":" << endl;
+
+  // i=2 because we don't want this function, nor the assertion handler
+  for(unsigned int i=2;i<stack_depth-2;++i){
+    // find the mangled function name
+    char *begin = stack_strings[i];
+    // function name starts with a (
+    while(*begin && *begin!='(') ++begin;
+    char *end=begin;
+    while(*end && *end!='+') ++end;
+
+    // see if we found our function name
+    if(*begin && *end){
+      *begin++ = 0;
+      *end = 0;
+      // use the C++ demangler
+
+      int status;
+      char *func_ret = abi::__cxa_demangle(begin, dm_function, &sz, &status);
+      if(func_ret){
+        // abi might have realloced...
+        dm_function = func_ret;
+        func_name = dm_function;
+      }
+      else{
+        // demangling failed... get the function name without demangling
+        func_name = begin;
+      }
+    }
+    else{
+      // function name not found... get the whole line
+      func_name = stack_strings[i];
+    }
+    cout << func_name << endl;
+  }
+  free(dm_function);
+  free(stack_strings); // malloc()ed by backtrace_symbols
+}
+#endif /* __GNUC__ */
+
 void Assert::_my_assert::doHooks(){
   for(vector<hook_t>::reverse_iterator iter = hooks.rbegin(); iter!=hooks.rend(); ++iter ){
Index: src/Helpers/Assert.hpp
===================================================================
--- src/Helpers/Assert.hpp	(revision 796aa6109f3bcda0d0023cb6b215cc697b7f10b4)
+++ src/Helpers/Assert.hpp	(revision 90aeb9429ecb7ac9202ee9810aa2ed003e1612f8)
@@ -305,4 +305,7 @@
                         const int line,
                         bool& ignore);
+#ifdef __GNUC__
+      static void backtrace(const char *file, int line);
+#endif /* __GNUC__ */
       static void addHook(Assert::hook_t hook);
       static void removeHook(Assert::hook_t hook);
Index: src/UIElements/TextUI/TextWindow.cpp
===================================================================
--- src/UIElements/TextUI/TextWindow.cpp	(revision 796aa6109f3bcda0d0023cb6b215cc697b7f10b4)
+++ src/UIElements/TextUI/TextWindow.cpp	(revision 90aeb9429ecb7ac9202ee9810aa2ed003e1612f8)
@@ -25,5 +25,5 @@
 #include "Views/StreamStringView.hpp"
 #include "Views/MethodStringView.hpp"
-#include "Helpers/MemDebug.hpp"
+#include "Helpers/Assert.hpp"
 
 #include "defs.hpp"
@@ -44,4 +44,5 @@
 TextWindow::TextWindow()
 {
+  ASSERT(0,"just some test");
   map <std::string, TextMenu *> NametoTextMenuMap;
 
