OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/debug/stack_trace.h" | 5 #include "base/debug/stack_trace.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <execinfo.h> | 8 #include <execinfo.h> |
9 #include <fcntl.h> | 9 #include <fcntl.h> |
10 #include <signal.h> | 10 #include <signal.h> |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 std::string::size_type mangled_end = | 79 std::string::size_type mangled_end = |
80 text->find_first_not_of(kSymbolCharacters, mangled_start); | 80 text->find_first_not_of(kSymbolCharacters, mangled_start); |
81 if (mangled_end == std::string::npos) { | 81 if (mangled_end == std::string::npos) { |
82 mangled_end = text->size(); | 82 mangled_end = text->size(); |
83 } | 83 } |
84 std::string mangled_symbol = | 84 std::string mangled_symbol = |
85 text->substr(mangled_start, mangled_end - mangled_start); | 85 text->substr(mangled_start, mangled_end - mangled_start); |
86 | 86 |
87 // Try to demangle the mangled symbol candidate. | 87 // Try to demangle the mangled symbol candidate. |
88 int status = 0; | 88 int status = 0; |
89 scoped_ptr_malloc<char> demangled_symbol( | 89 scoped_ptr<char, base::FreeDeleter> demangled_symbol( |
90 abi::__cxa_demangle(mangled_symbol.c_str(), NULL, 0, &status)); | 90 abi::__cxa_demangle(mangled_symbol.c_str(), NULL, 0, &status)); |
91 if (status == 0) { // Demangling is successful. | 91 if (status == 0) { // Demangling is successful. |
92 // Remove the mangled symbol. | 92 // Remove the mangled symbol. |
93 text->erase(mangled_start, mangled_end - mangled_start); | 93 text->erase(mangled_start, mangled_end - mangled_start); |
94 // Insert the demangled symbol. | 94 // Insert the demangled symbol. |
95 text->insert(mangled_start, demangled_symbol.get()); | 95 text->insert(mangled_start, demangled_symbol.get()); |
96 // Next time, we'll start right after the demangled symbol we inserted. | 96 // Next time, we'll start right after the demangled symbol we inserted. |
97 search_from = mangled_start + strlen(demangled_symbol.get()); | 97 search_from = mangled_start + strlen(demangled_symbol.get()); |
98 } else { | 98 } else { |
99 // Failed to demangle. Retry after the "_Z" we just found. | 99 // Failed to demangle. Retry after the "_Z" we just found. |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 *ptr = *start; | 547 *ptr = *start; |
548 *start++ = ch; | 548 *start++ = ch; |
549 } | 549 } |
550 return buf; | 550 return buf; |
551 } | 551 } |
552 | 552 |
553 } // namespace internal | 553 } // namespace internal |
554 | 554 |
555 } // namespace debug | 555 } // namespace debug |
556 } // namespace base | 556 } // namespace base |
OLD | NEW |