* commit 'c369f1993b41dac8ac1a005b3bc9312dfa5ebd63': Move BACKTRACE_NO_TID to BACKTRACE_CURRENT_THREAD.
This commit is contained in:
commit
ec7894cf5c
4 changed files with 24 additions and 17 deletions
|
|
@ -28,8 +28,8 @@ __BEGIN_DECLS
|
||||||
// thread from the current process will be traced.
|
// thread from the current process will be traced.
|
||||||
#define BACKTRACE_CURRENT_PROCESS -1
|
#define BACKTRACE_CURRENT_PROCESS -1
|
||||||
// When the tid to be traced is set to this value, then trace the specified
|
// When the tid to be traced is set to this value, then trace the specified
|
||||||
// pid.
|
// current thread of the specified pid.
|
||||||
#define BACKTRACE_NO_TID -1
|
#define BACKTRACE_CURRENT_THREAD -1
|
||||||
|
|
||||||
#define MAX_BACKTRACE_FRAMES 64
|
#define MAX_BACKTRACE_FRAMES 64
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public:
|
||||||
|
|
||||||
// Immediately collect the stack traces for the specified thread.
|
// Immediately collect the stack traces for the specified thread.
|
||||||
// The default is to dump the stack of the current call.
|
// The default is to dump the stack of the current call.
|
||||||
void update(int32_t ignoreDepth=1, pid_t tid=BACKTRACE_NO_TID);
|
void update(int32_t ignoreDepth=1, pid_t tid=BACKTRACE_CURRENT_THREAD);
|
||||||
|
|
||||||
// Dump a stack trace to the log using the supplied logtag.
|
// Dump a stack trace to the log using the supplied logtag.
|
||||||
void log(const char* logtag,
|
void log(const char* logtag,
|
||||||
|
|
|
||||||
|
|
@ -219,12 +219,12 @@ bool BacktracePtrace::ReadWord(uintptr_t ptr, uint32_t* out_value) {
|
||||||
|
|
||||||
Backtrace* Backtrace::Create(pid_t pid, pid_t tid, backtrace_map_info_t* map_info) {
|
Backtrace* Backtrace::Create(pid_t pid, pid_t tid, backtrace_map_info_t* map_info) {
|
||||||
if (pid == BACKTRACE_CURRENT_PROCESS || pid == getpid()) {
|
if (pid == BACKTRACE_CURRENT_PROCESS || pid == getpid()) {
|
||||||
if (tid == BACKTRACE_NO_TID || tid == gettid()) {
|
if (tid == BACKTRACE_CURRENT_THREAD || tid == gettid()) {
|
||||||
return CreateCurrentObj(map_info);
|
return CreateCurrentObj(map_info);
|
||||||
} else {
|
} else {
|
||||||
return CreateThreadObj(tid, map_info);
|
return CreateThreadObj(tid, map_info);
|
||||||
}
|
}
|
||||||
} else if (tid == BACKTRACE_NO_TID) {
|
} else if (tid == BACKTRACE_CURRENT_THREAD) {
|
||||||
return CreatePtraceObj(pid, pid, map_info);
|
return CreatePtraceObj(pid, pid, map_info);
|
||||||
} else {
|
} else {
|
||||||
return CreatePtraceObj(pid, tid, map_info);
|
return CreatePtraceObj(pid, tid, map_info);
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,8 @@ void VerifyLevelDump(const backtrace_t* backtrace) {
|
||||||
void VerifyLevelBacktrace(void*) {
|
void VerifyLevelBacktrace(void*) {
|
||||||
backtrace_context_t context;
|
backtrace_context_t context;
|
||||||
|
|
||||||
ASSERT_TRUE(backtrace_create_context(&context, BACKTRACE_CURRENT_PROCESS, BACKTRACE_NO_TID, 0));
|
ASSERT_TRUE(backtrace_create_context(&context, BACKTRACE_CURRENT_PROCESS,
|
||||||
|
BACKTRACE_CURRENT_THREAD, 0));
|
||||||
|
|
||||||
VerifyLevelDump(context.backtrace);
|
VerifyLevelDump(context.backtrace);
|
||||||
|
|
||||||
|
|
@ -165,7 +166,8 @@ void VerifyMaxDump(const backtrace_t* backtrace) {
|
||||||
void VerifyMaxBacktrace(void*) {
|
void VerifyMaxBacktrace(void*) {
|
||||||
backtrace_context_t context;
|
backtrace_context_t context;
|
||||||
|
|
||||||
ASSERT_TRUE(backtrace_create_context(&context, BACKTRACE_CURRENT_PROCESS, BACKTRACE_NO_TID, 0));
|
ASSERT_TRUE(backtrace_create_context(&context, BACKTRACE_CURRENT_PROCESS,
|
||||||
|
BACKTRACE_CURRENT_THREAD, 0));
|
||||||
|
|
||||||
VerifyMaxDump(context.backtrace);
|
VerifyMaxDump(context.backtrace);
|
||||||
|
|
||||||
|
|
@ -232,15 +234,18 @@ void VerifyIgnoreFrames(
|
||||||
|
|
||||||
void VerifyLevelIgnoreFrames(void*) {
|
void VerifyLevelIgnoreFrames(void*) {
|
||||||
backtrace_context_t all;
|
backtrace_context_t all;
|
||||||
ASSERT_TRUE(backtrace_create_context(&all, BACKTRACE_CURRENT_PROCESS, BACKTRACE_NO_TID, 0));
|
ASSERT_TRUE(backtrace_create_context(&all, BACKTRACE_CURRENT_PROCESS,
|
||||||
|
BACKTRACE_CURRENT_THREAD, 0));
|
||||||
ASSERT_TRUE(all.backtrace != NULL);
|
ASSERT_TRUE(all.backtrace != NULL);
|
||||||
|
|
||||||
backtrace_context_t ign1;
|
backtrace_context_t ign1;
|
||||||
ASSERT_TRUE(backtrace_create_context(&ign1, BACKTRACE_CURRENT_PROCESS, BACKTRACE_NO_TID, 1));
|
ASSERT_TRUE(backtrace_create_context(&ign1, BACKTRACE_CURRENT_PROCESS,
|
||||||
|
BACKTRACE_CURRENT_THREAD, 1));
|
||||||
ASSERT_TRUE(ign1.backtrace != NULL);
|
ASSERT_TRUE(ign1.backtrace != NULL);
|
||||||
|
|
||||||
backtrace_context_t ign2;
|
backtrace_context_t ign2;
|
||||||
ASSERT_TRUE(backtrace_create_context(&ign2, BACKTRACE_CURRENT_PROCESS, BACKTRACE_NO_TID, 2));
|
ASSERT_TRUE(backtrace_create_context(&ign2, BACKTRACE_CURRENT_PROCESS,
|
||||||
|
BACKTRACE_CURRENT_THREAD, 2));
|
||||||
ASSERT_TRUE(ign2.backtrace != NULL);
|
ASSERT_TRUE(ign2.backtrace != NULL);
|
||||||
|
|
||||||
VerifyIgnoreFrames(all.backtrace, ign1.backtrace, ign2.backtrace,
|
VerifyIgnoreFrames(all.backtrace, ign1.backtrace, ign2.backtrace,
|
||||||
|
|
@ -296,7 +301,7 @@ TEST(libbacktrace, ptrace_trace) {
|
||||||
ASSERT_NE(test_level_one(1, 2, 3, 4, NULL, NULL), 0);
|
ASSERT_NE(test_level_one(1, 2, 3, 4, NULL, NULL), 0);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
VerifyProcTest(pid, BACKTRACE_NO_TID, ReadyLevelBacktrace, VerifyLevelDump);
|
VerifyProcTest(pid, BACKTRACE_CURRENT_THREAD, ReadyLevelBacktrace, VerifyLevelDump);
|
||||||
|
|
||||||
kill(pid, SIGKILL);
|
kill(pid, SIGKILL);
|
||||||
int status;
|
int status;
|
||||||
|
|
@ -309,7 +314,7 @@ TEST(libbacktrace, ptrace_max_trace) {
|
||||||
ASSERT_NE(test_recursive_call(MAX_BACKTRACE_FRAMES+10, NULL, NULL), 0);
|
ASSERT_NE(test_recursive_call(MAX_BACKTRACE_FRAMES+10, NULL, NULL), 0);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
VerifyProcTest(pid, BACKTRACE_NO_TID, ReadyMaxBacktrace, VerifyMaxDump);
|
VerifyProcTest(pid, BACKTRACE_CURRENT_THREAD, ReadyMaxBacktrace, VerifyMaxDump);
|
||||||
|
|
||||||
kill(pid, SIGKILL);
|
kill(pid, SIGKILL);
|
||||||
int status;
|
int status;
|
||||||
|
|
@ -320,11 +325,11 @@ void VerifyProcessIgnoreFrames(const backtrace_t* bt_all) {
|
||||||
pid_t pid = bt_all->pid;
|
pid_t pid = bt_all->pid;
|
||||||
|
|
||||||
backtrace_context_t ign1;
|
backtrace_context_t ign1;
|
||||||
ASSERT_TRUE(backtrace_create_context(&ign1, pid, BACKTRACE_NO_TID, 1));
|
ASSERT_TRUE(backtrace_create_context(&ign1, pid, BACKTRACE_CURRENT_THREAD, 1));
|
||||||
ASSERT_TRUE(ign1.backtrace != NULL);
|
ASSERT_TRUE(ign1.backtrace != NULL);
|
||||||
|
|
||||||
backtrace_context_t ign2;
|
backtrace_context_t ign2;
|
||||||
ASSERT_TRUE(backtrace_create_context(&ign2, pid, BACKTRACE_NO_TID, 2));
|
ASSERT_TRUE(backtrace_create_context(&ign2, pid, BACKTRACE_CURRENT_THREAD, 2));
|
||||||
ASSERT_TRUE(ign2.backtrace != NULL);
|
ASSERT_TRUE(ign2.backtrace != NULL);
|
||||||
|
|
||||||
VerifyIgnoreFrames(bt_all, ign1.backtrace, ign2.backtrace, NULL);
|
VerifyIgnoreFrames(bt_all, ign1.backtrace, ign2.backtrace, NULL);
|
||||||
|
|
@ -339,7 +344,7 @@ TEST(libbacktrace, ptrace_ignore_frames) {
|
||||||
ASSERT_NE(test_level_one(1, 2, 3, 4, NULL, NULL), 0);
|
ASSERT_NE(test_level_one(1, 2, 3, 4, NULL, NULL), 0);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
VerifyProcTest(pid, BACKTRACE_NO_TID, ReadyLevelBacktrace, VerifyProcessIgnoreFrames);
|
VerifyProcTest(pid, BACKTRACE_CURRENT_THREAD, ReadyLevelBacktrace, VerifyProcessIgnoreFrames);
|
||||||
|
|
||||||
kill(pid, SIGKILL);
|
kill(pid, SIGKILL);
|
||||||
int status;
|
int status;
|
||||||
|
|
@ -614,10 +619,12 @@ TEST(libbacktrace, thread_multiple_dump) {
|
||||||
TEST(libbacktrace, format_test) {
|
TEST(libbacktrace, format_test) {
|
||||||
backtrace_context_t context;
|
backtrace_context_t context;
|
||||||
|
|
||||||
ASSERT_TRUE(backtrace_create_context(&context, BACKTRACE_CURRENT_PROCESS, BACKTRACE_NO_TID, 0));
|
ASSERT_TRUE(backtrace_create_context(&context, BACKTRACE_CURRENT_PROCESS,
|
||||||
|
BACKTRACE_CURRENT_THREAD, 0));
|
||||||
ASSERT_TRUE(context.backtrace != NULL);
|
ASSERT_TRUE(context.backtrace != NULL);
|
||||||
|
|
||||||
backtrace_frame_data_t* frame = const_cast<backtrace_frame_data_t*>(&context.backtrace->frames[1]);
|
backtrace_frame_data_t* frame =
|
||||||
|
const_cast<backtrace_frame_data_t*>(&context.backtrace->frames[1]);
|
||||||
backtrace_frame_data_t save_frame = *frame;
|
backtrace_frame_data_t save_frame = *frame;
|
||||||
|
|
||||||
memset(frame, 0, sizeof(backtrace_frame_data_t));
|
memset(frame, 0, sizeof(backtrace_frame_data_t));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue