blob: 97a4cd76833c48e1fd2882198aa266039f361261 [file] [log] [blame]
// Copyright (c) 2012 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 "butil/debug/stack_trace.h"
#include "butil/basictypes.h"
#include <string.h>
#include <algorithm>
#include <sstream>
namespace butil {
namespace debug {
StackTrace::StackTrace(const void* const* trace, size_t count) {
count = std::min(count, arraysize(trace_));
if (count)
memcpy(trace_, trace, count * sizeof(trace_[0]));
count_ = count;
}
const void *const *StackTrace::Addresses(size_t* count) const {
*count = count_;
if (count_)
return trace_;
return NULL;
}
size_t StackTrace::CopyAddressTo(void** buffer, size_t max_nframes) const {
size_t nframes = std::min(count_, max_nframes);
memcpy(buffer, trace_, nframes * sizeof(void*));
return nframes;
}
std::string StackTrace::ToString() const {
std::string str;
str.reserve(1024);
#if !defined(__UCLIBC__)
OutputToString(str);
#endif
return str;
}
} // namespace debug
} // namespace butil