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__ #ifndef GOOGLE_BREAKPAD_PROCESSOR_CALL_STACK_H__
#define GOOGLE_BREAKPAD_PROCESSOR_CALL_STACK_H__ #define GOOGLE_BREAKPAD_PROCESSOR_CALL_STACK_H__
#include <cstdint>
#include <vector> #include <vector>
namespace google_breakpad { namespace google_breakpad {
@ -61,15 +62,24 @@ class CallStack {
// Resets the CallStack to its initial empty state // Resets the CallStack to its initial empty state
void Clear(); void Clear();
const vector<StackFrame*>* frames() const { return &frames_; } 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: private:
// Stackwalker is responsible for building the frames_ vector. // Stackwalker is responsible for building the frames_ vector.
friend class Stackwalker; friend class Stackwalker;
// Storage for pushed frames. // Storage for pushed frames.
vector<StackFrame*> 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 } // namespace google_breakpad

View file

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

View file

@ -267,6 +267,7 @@ ProcessResult MinidumpProcessor::Process(
// one bad thread. // one bad thread.
BPLOG(ERROR) << "No stackwalker for " << thread_string; BPLOG(ERROR) << "No stackwalker for " << thread_string;
} }
stack->set_tid(thread_id);
process_state->threads_.push_back(stack.release()); process_state->threads_.push_back(stack.release());
process_state->thread_memory_regions_.push_back(thread_memory); 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_reason(), "EXCEPTION_ACCESS_VIOLATION_WRITE");
ASSERT_EQ(state.crash_address(), 0x45U); ASSERT_EQ(state.crash_address(), 0x45U);
ASSERT_EQ(state.threads()->size(), size_t(1)); ASSERT_EQ(state.threads()->size(), size_t(1));
EXPECT_EQ((*state.threads())[0]->tid(), 3060);
ASSERT_EQ(state.requesting_thread(), 0); ASSERT_EQ(state.requesting_thread(), 0);
EXPECT_EQ(1171480435U, state.time_date_stamp()); EXPECT_EQ(1171480435U, state.time_date_stamp());
EXPECT_EQ(1171480435U, state.process_create_time()); EXPECT_EQ(1171480435U, state.process_create_time());