m_offset = ofs;
             }
         }
-    }
 
-    m_module.assign(syminfo, posOpen);
+        m_module.assign(syminfo, posOpen);
+    }
+    else // not in "module(funcname+offset)" format
+    {
+        m_module = syminfo;
+    }
 }
 
 void wxStackFrame::OnGetLocation()
 
     char **symbols = backtrace_symbols(addresses, depth);
 
-    for ( int n = 0; n < depth; n++ )
+    // we have 3 more "intermediate" frames which the calling code doesn't know
+    // about., account for them
+    skip += 3;
+
+    for ( int n = skip; n < depth; n++ )
     {
-        wxStackFrame frame(n, addresses[n], symbols[n]);
+        wxStackFrame frame(n - skip, addresses[n], symbols[n]);
         OnStackFrame(frame);
     }
 }