]> git.cworth.org Git - apitrace/blobdiff - gui/apitracecall.cpp
Backtrace via call detail
[apitrace] / gui / apitracecall.cpp
index 33774861013cc99165c323800a09f6cbef0fc1ac..c3a1deebed5bc01e4ef2cb13956ef06c0cc0a387 100644 (file)
@@ -685,6 +685,37 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame,
     }
     m_argValues.squeeze();
     m_flags = call->flags;
+    if (call->backtrace != NULL) {
+        QString qbacktrace;
+        for (int i = 0; i < call->backtrace->frames.size(); i++) {
+            trace::StackFrame* frame = call->backtrace->frames[i];
+            trace::String* tmp;
+            tmp = frame->module;
+            if (tmp != NULL) {
+                qbacktrace += QString("%1 ").arg(tmp->toString());
+            }
+            tmp = frame->function;
+            if (tmp != NULL) {
+                qbacktrace += QString("at %1() ").arg(tmp->toString());
+            }
+            tmp = frame->filename;
+            if (tmp != NULL) {
+                qbacktrace += QString("at %1").arg(tmp->toString());
+                tmp = frame->linenumber;
+                if (tmp != NULL) {
+                    qbacktrace += QString(":%1 ").arg(tmp->toString());
+                }
+            }
+            else {
+                tmp = frame->offset;
+                if (tmp != NULL) {
+                    qbacktrace += QString("[%1]").arg(tmp->toString());
+                }
+            }
+            qbacktrace += "\n";
+        }
+        this->setBacktrace(qbacktrace);
+    }
 }
 
 ApiTraceCall::~ApiTraceCall()
@@ -820,6 +851,16 @@ int ApiTraceCall::binaryDataIndex() const
     return m_binaryDataIndex;
 }
 
+QString ApiTraceCall::backtrace() const
+{
+    return m_backtrace;
+}
+
+void ApiTraceCall::setBacktrace(QString backtrace)
+{
+    m_backtrace = backtrace;
+}
+
 QStaticText ApiTraceCall::staticText() const
 {
     if (m_staticText && !m_staticText->text().isEmpty())