Chromium Code Reviews| Index: base/debug/stack_trace.h |
| diff --git a/base/debug/stack_trace.h b/base/debug/stack_trace.h |
| index 07e119a16b4a255dc443acf28c37d0c5cefa25c2..0344bd24c581506b73829516a35602e337d13285 100644 |
| --- a/base/debug/stack_trace.h |
| +++ b/base/debug/stack_trace.h |
| @@ -22,6 +22,12 @@ struct _EXCEPTION_POINTERS; |
| struct _CONTEXT; |
| #endif |
| +#if defined(OS_POSIX) && (defined(__i386__) || defined(__x86_64__)) |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS 1 |
| +#else |
| +#define HAVE_TRACE_STACK_FRAME_POINTERS 0 |
| +#endif |
| + |
| namespace base { |
| namespace debug { |
| @@ -76,6 +82,8 @@ class BASE_EXPORT StackTrace { |
| // Resolves backtrace to symbols and returns as string. |
| std::string ToString() const; |
| + static StackTrace FromFramePointers(size_t max_depth); |
| + |
| private: |
| #if defined(OS_WIN) |
| void InitTrace(const _CONTEXT* context_record); |
| @@ -93,6 +101,20 @@ class BASE_EXPORT StackTrace { |
| size_t count_; |
| }; |
| +#if HAVE_TRACE_STACK_FRAME_POINTERS |
| +// Traces the stack by using frame pointers. This function is faster but less |
| +// reliable than StackTrace. It should work for debug and profiling builds, |
| +// but not for release builds (although there are some exceptions). |
| +// |
| +// Writes at most |max_depth| frames (instruction pointers) into |out_trace| |
| +// after skipping |skip_count| frames. Note that the function itself is not |
| +// added to the trace so |skip_count| should be 0 in most cases. |
| +// Returns number of frames written. |
| +BASE_EXPORT size_t TraceStackFramePointers(const void** out_trace, |
| + size_t max_depth, |
| + size_t skip_count); |
|
bcwhite
2016/04/13 12:36:24
skip_initial?
|
| +#endif // HAVE_TRACE_STACK_FRAME_POINTERS |
| + |
| namespace internal { |
| #if defined(OS_POSIX) && !defined(OS_ANDROID) |