virtual void OnStackFrame(const wxStackFrame& frame) { m_stackTrace << wxString::Format(_T("[%02d] "), frame.GetLevel()); wxString name = frame.GetName(); if ( !name.empty() ) { m_stackTrace << wxString::Format(_T("%-40s"), name.c_str()); } else { m_stackTrace << wxString::Format ( _T("0x%08lx"), (unsigned long)frame.GetAddress() ); } if ( frame.HasSourceLocation() ) { m_stackTrace << _T('\t') << frame.GetFileName() << _T(':') << frame.GetLine(); } m_stackTrace << _T('\n'); }
void XmlStackWalker::OnStackFrame(const wxStackFrame& frame) { m_isOk = true; wxXmlNode *nodeFrame = new wxXmlNode(wxXML_ELEMENT_NODE, wxT("frame")); m_nodeStack->AddChild(nodeFrame); NumProperty(nodeFrame, wxT("level"), frame.GetLevel()); wxString func = frame.GetName(); if ( !func.empty() ) { nodeFrame->AddAttribute(wxT("function"), func); HexProperty(nodeFrame, wxT("offset"), frame.GetOffset()); } if ( frame.HasSourceLocation() ) { nodeFrame->AddAttribute(wxT("file"), frame.GetFileName()); NumProperty(nodeFrame, wxT("line"), frame.GetLine()); } const size_t nParams = frame.GetParamCount(); if ( nParams ) { wxXmlNode *nodeParams = new wxXmlNode(wxXML_ELEMENT_NODE, wxT("parameters")); nodeFrame->AddChild(nodeParams); for ( size_t n = 0; n < nParams; n++ ) { wxXmlNode * nodeParam = new wxXmlNode(wxXML_ELEMENT_NODE, wxT("parameter")); nodeParams->AddChild(nodeParam); NumProperty(nodeParam, wxT("number"), n); wxString type, name, value; if ( !frame.GetParam(n, &type, &name, &value) ) continue; if ( !type.empty() ) TextElement(nodeParam, wxT("type"), type); if ( !name.empty() ) TextElement(nodeParam, wxT("name"), name); if ( !value.empty() ) TextElement(nodeParam, wxT("value"), value); } } }
void OnStackFrame(const wxStackFrame& frame) { string location = "[unknown location] "; if (frame.HasSourceLocation()) location = S_FMT("(%s:%d) ", frame.GetFileName(), frame.GetLine()); wxUIntPtr address = wxPtrToUInt(frame.GetAddress()); string func_name = frame.GetName(); if (func_name.IsEmpty()) func_name = S_FMT("[unknown:%d]", address); stack_trace.Append(S_FMT("%d: %s%s\n", frame.GetLevel(), location, func_name)); }