diff --git a/src/plugins/debugger/cdb/cdbstacktracecontext.cpp b/src/plugins/debugger/cdb/cdbstacktracecontext.cpp index 3e5f1c65fcb1d9e2ca1b72172a66749298d64646..8cf72461fe4b7a33895274e4ab9a9fb2e8a6d39e 100644 --- a/src/plugins/debugger/cdb/cdbstacktracecontext.cpp +++ b/src/plugins/debugger/cdb/cdbstacktracecontext.cpp @@ -226,6 +226,8 @@ static inline QString msgGetThreadStateFailed(unsigned long threadId, const QStr return QString::fromLatin1("Unable to determine the state of thread %1: %2").arg(threadId).arg(why); } +// Determine information about thread. This changes the +// current thread to thread->id. static inline bool getStoppedThreadState(const CdbComInterfaces &cif, ThreadData *t, QString *errorMessage) @@ -315,6 +317,14 @@ bool CdbStackTraceContext::getThreads(const CdbComInterfaces &cif, } threads->push_back(threadData); } + // Restore thread id + if (isStopped && threads->back().id != *currentThreadId) { + hr = cif.debugSystemObjects->SetCurrentThreadId(*currentThreadId); + if (FAILED(hr)) { + *errorMessage= msgGetThreadsFailed(msgComFailed("SetCurrentThreadId", hr)); + return false; + } + } return true; }