Add the TID to the CallStack.

R=ivanpe@chromium.org

Review URL: https://codereview.chromium.org/1849933002 .
This commit is contained in:
Sebastien Marchand 2016-04-01 10:11:10 -04:00
parent c77c51fae6
commit d9c532217e
4 changed files with 14 additions and 1 deletions

View file

@ -45,6 +45,7 @@
#ifndef GOOGLE_BREAKPAD_PROCESSOR_CALL_STACK_H__
#define GOOGLE_BREAKPAD_PROCESSOR_CALL_STACK_H__
#include <cstdint>
#include <vector>
namespace google_breakpad {
@ -61,15 +62,24 @@ class CallStack {
// Resets the CallStack to its initial empty state
void Clear();
const vector<StackFrame*>* frames() const { return &frames_; }
// Set the TID associated with this call stack.
void set_tid(uint32_t tid) { tid_ = tid; }
uint32_t tid() { return tid_; }
private:
// Stackwalker is responsible for building the frames_ vector.
friend class Stackwalker;
// Storage for pushed frames.
vector<StackFrame*> frames_;
// The TID associated with this call stack. Default to 0 if it's not
// available.
uint32_t tid_;
};
} // namespace google_breakpad

View file

@ -48,6 +48,7 @@ void CallStack::Clear() {
++iterator) {
delete *iterator;
}
tid_ = 0;
}
} // namespace google_breakpad

View file

@ -267,6 +267,7 @@ ProcessResult MinidumpProcessor::Process(
// one bad thread.
BPLOG(ERROR) << "No stackwalker for " << thread_string;
}
stack->set_tid(thread_id);
process_state->threads_.push_back(stack.release());
process_state->thread_memory_regions_.push_back(thread_memory);
}

View file

@ -414,6 +414,7 @@ TEST_F(MinidumpProcessorTest, TestBasicProcessing) {
ASSERT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION_WRITE");
ASSERT_EQ(state.crash_address(), 0x45U);
ASSERT_EQ(state.threads()->size(), size_t(1));
EXPECT_EQ((*state.threads())[0]->tid(), 3060);
ASSERT_EQ(state.requesting_thread(), 0);
EXPECT_EQ(1171480435U, state.time_date_stamp());
EXPECT_EQ(1171480435U, state.process_create_time());