|  | // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "components/crash/core/common/crash_key.h" | 
|  |  | 
|  | #include "base/format_macros.h" | 
|  | #include "base/strings/stringprintf.h" | 
|  |  | 
|  | namespace crash_reporter { | 
|  | namespace internal { | 
|  |  | 
|  | std::string FormatStackTrace(const base::debug::StackTrace& trace, | 
|  | size_t max_length) { | 
|  | size_t count = 0; | 
|  | const void* const* addresses = trace.Addresses(&count); | 
|  |  | 
|  | std::string value; | 
|  | for (size_t i = 0; i < count; ++i) { | 
|  | std::string address = base::StringPrintf( | 
|  | "0x%" PRIx64, reinterpret_cast<uint64_t>(addresses[i])); | 
|  | if (value.size() + address.size() > max_length) | 
|  | break; | 
|  | value += address + " "; | 
|  | } | 
|  |  | 
|  | if (!value.empty() && value.back() == ' ') { | 
|  | value.resize(value.size() - 1); | 
|  | } | 
|  |  | 
|  | return value; | 
|  | } | 
|  |  | 
|  | }  // namespace internal | 
|  | }  // namespace crash_reporter |