Merge "Change the way some maps are printed." am: 07d9de7016
am: bedab17693
am: 4690cf6108
* commit '4690cf6108e67bcf1b0440b7f2fa18e244f57ef6':
Change the way some maps are printed.
This commit is contained in:
commit
5f1fccf87a
|
@ -93,16 +93,26 @@ std::string Backtrace::FormatFrameData(size_t frame_num) {
|
|||
}
|
||||
|
||||
std::string Backtrace::FormatFrameData(const backtrace_frame_data_t* frame) {
|
||||
const char* map_name;
|
||||
if (BacktraceMap::IsValid(frame->map) && !frame->map.name.empty()) {
|
||||
map_name = frame->map.name.c_str();
|
||||
uintptr_t relative_pc;
|
||||
std::string map_name;
|
||||
if (BacktraceMap::IsValid(frame->map)) {
|
||||
relative_pc = BacktraceMap::GetRelativePc(frame->map, frame->pc);
|
||||
if (!frame->map.name.empty()) {
|
||||
map_name = frame->map.name.c_str();
|
||||
if (map_name[0] == '[' && map_name[map_name.size() - 1] == ']') {
|
||||
map_name.resize(map_name.size() - 1);
|
||||
map_name += StringPrintf(":%" PRIPTR "]", frame->map.start);
|
||||
}
|
||||
} else {
|
||||
map_name = StringPrintf("<anonymous:%" PRIPTR ">", frame->map.start);
|
||||
}
|
||||
} else {
|
||||
map_name = "<unknown>";
|
||||
relative_pc = frame->pc;
|
||||
}
|
||||
|
||||
uintptr_t relative_pc = BacktraceMap::GetRelativePc(frame->map, frame->pc);
|
||||
|
||||
std::string line(StringPrintf("#%02zu pc %" PRIPTR " %s", frame->num, relative_pc, map_name));
|
||||
std::string line(StringPrintf("#%02zu pc %" PRIPTR " ", frame->num, relative_pc));
|
||||
line += map_name;
|
||||
// Special handling for non-zero offset maps, we need to print that
|
||||
// information.
|
||||
if (frame->map.offset != 0) {
|
||||
|
|
|
@ -775,16 +775,29 @@ TEST(libbacktrace, format_test) {
|
|||
backtrace->FormatFrameData(&frame));
|
||||
|
||||
// Check map name empty, but exists.
|
||||
frame.map.start = 1;
|
||||
frame.map.end = 1;
|
||||
frame.pc = 0xb0020;
|
||||
frame.map.start = 0xb0000;
|
||||
frame.map.end = 0xbffff;
|
||||
frame.map.load_base = 0;
|
||||
#if defined(__LP64__)
|
||||
EXPECT_EQ("#01 pc 0000000000000001 <unknown>",
|
||||
EXPECT_EQ("#01 pc 0000000000000020 <anonymous:00000000000b0000>",
|
||||
#else
|
||||
EXPECT_EQ("#01 pc 00000001 <unknown>",
|
||||
EXPECT_EQ("#01 pc 00000020 <anonymous:000b0000>",
|
||||
#endif
|
||||
backtrace->FormatFrameData(&frame));
|
||||
|
||||
// Check map name begins with a [.
|
||||
frame.pc = 0xc0020;
|
||||
frame.map.start = 0xc0000;
|
||||
frame.map.end = 0xcffff;
|
||||
frame.map.load_base = 0;
|
||||
frame.map.name = "[anon:thread signal stack]";
|
||||
#if defined(__LP64__)
|
||||
EXPECT_EQ("#01 pc 0000000000000020 [anon:thread signal stack:00000000000c0000]",
|
||||
#else
|
||||
EXPECT_EQ("#01 pc 00000020 [anon:thread signal stack:000c0000]",
|
||||
#endif
|
||||
backtrace->FormatFrameData(&frame));
|
||||
|
||||
// Check relative pc is set and map name is set.
|
||||
frame.pc = 0x12345679;
|
||||
|
|
Loading…
Reference in New Issue