OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
6 #include "base/debug_util.h" | 6 #include "base/debug_util.h" |
7 | 7 |
8 #include <errno.h> | 8 #include <errno.h> |
9 #include <fcntl.h> | 9 #include <fcntl.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 void DebugUtil::BreakDebugger() { | 114 void DebugUtil::BreakDebugger() { |
115 #if defined(ARCH_CPU_ARM_FAMILY) | 115 #if defined(ARCH_CPU_ARM_FAMILY) |
116 asm("bkpt 0"); | 116 asm("bkpt 0"); |
117 #else | 117 #else |
118 asm("int3"); | 118 asm("int3"); |
119 #endif | 119 #endif |
120 } | 120 } |
121 | 121 |
122 StackTrace::StackTrace() { | 122 StackTrace::StackTrace() { |
123 #if defined(OS_MACOSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 | 123 #if defined(OS_MACOSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 |
124 if (!backtrace) { | 124 if (backtrace == NULL) { |
125 count_ = 0; | 125 count_ = 0; |
126 return; | 126 return; |
127 } | 127 } |
128 #endif | 128 #endif |
129 // Though the backtrace API man page does not list any possible negative | 129 // Though the backtrace API man page does not list any possible negative |
130 // return values, we take no chance. | 130 // return values, we take no chance. |
131 count_ = std::max(backtrace(trace_, arraysize(trace_)), 0); | 131 count_ = std::max(backtrace(trace_, arraysize(trace_)), 0); |
132 } | 132 } |
133 | 133 |
134 void StackTrace::PrintBacktrace() { | 134 void StackTrace::PrintBacktrace() { |
135 #if defined(OS_MACOSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 | 135 #if defined(OS_MACOSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 |
136 if (!backtrace_symbols_fd) | 136 if (backtrace_symbols_fd == NULL) |
137 return; | 137 return; |
138 #endif | 138 #endif |
139 fflush(stderr); | 139 fflush(stderr); |
140 backtrace_symbols_fd(trace_, count_, STDERR_FILENO); | 140 backtrace_symbols_fd(trace_, count_, STDERR_FILENO); |
141 } | 141 } |
142 | 142 |
143 void StackTrace::OutputToStream(std::ostream* os) { | 143 void StackTrace::OutputToStream(std::ostream* os) { |
144 #if defined(OS_MACOSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 | 144 #if defined(OS_MACOSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 |
145 if (!backtrace_symbols) | 145 if (backtrace_symbols == NULL) |
146 return; | 146 return; |
147 #endif | 147 #endif |
148 scoped_ptr_malloc<char*> trace_symbols(backtrace_symbols(trace_, count_)); | 148 scoped_ptr_malloc<char*> trace_symbols(backtrace_symbols(trace_, count_)); |
149 | 149 |
150 // If we can't retrieve the symbols, print an error and just dump the raw | 150 // If we can't retrieve the symbols, print an error and just dump the raw |
151 // addresses. | 151 // addresses. |
152 if (trace_symbols.get() == NULL) { | 152 if (trace_symbols.get() == NULL) { |
153 (*os) << "Unable get symbols for backtrace (" << strerror(errno) | 153 (*os) << "Unable get symbols for backtrace (" << strerror(errno) |
154 << "). Dumping raw addresses in trace:\n"; | 154 << "). Dumping raw addresses in trace:\n"; |
155 for (int i = 0; i < count_; ++i) { | 155 for (int i = 0; i < count_; ++i) { |
156 (*os) << "\t" << trace_[i] << "\n"; | 156 (*os) << "\t" << trace_[i] << "\n"; |
157 } | 157 } |
158 } else { | 158 } else { |
159 (*os) << "Backtrace:\n"; | 159 (*os) << "Backtrace:\n"; |
160 for (int i = 0; i < count_; ++i) { | 160 for (int i = 0; i < count_; ++i) { |
161 (*os) << "\t" << trace_symbols.get()[i] << "\n"; | 161 (*os) << "\t" << trace_symbols.get()[i] << "\n"; |
162 } | 162 } |
163 } | 163 } |
164 } | 164 } |
OLD | NEW |