From b7412c8cd6c1428183866b47052131fc694837fa Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Sat, 8 Oct 2022 05:07:52 +0000 Subject: [PATCH] libutils: RefBase DEBUG_REF love Done here: - path saved to a useable location on host - path always printed (for visibility for new users) - open(.., 666) - That's '01204' not '0644' oops Future considerations: - make defines constexpr instead of ifdef - copy malloc hook design to avoid needing to recompile code - make libutilscallstack default on host - run libutils tests, not just test compile debug mode - code incorrectly prints ref 'doesn't exist' seems it's gotten out of sync, but still good enough to use stacktraces Bug: 244325464 Test: manual Change-Id: I732e5b8aec3cd946ef3559a2a814caf693846cc0 --- libutils/RefBase.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libutils/RefBase.cpp b/libutils/RefBase.cpp index b5b3efd1a..ab122c732 100644 --- a/libutils/RefBase.cpp +++ b/libutils/RefBase.cpp @@ -49,7 +49,11 @@ // folder where stack traces are saved when DEBUG_REFS is enabled // this folder needs to exist and be writable +#ifdef __ANDROID__ #define DEBUG_REFS_CALLSTACK_PATH "/data/debug" +#else +#define DEBUG_REFS_CALLSTACK_PATH "." +#endif // log all reference counting operations #define PRINT_REFS 0 @@ -324,11 +328,11 @@ public: char name[100]; snprintf(name, sizeof(name), DEBUG_REFS_CALLSTACK_PATH "/%p.stack", this); - int rc = open(name, O_RDWR | O_CREAT | O_APPEND, 644); + int rc = open(name, O_RDWR | O_CREAT | O_APPEND, 0644); if (rc >= 0) { (void)write(rc, text.string(), text.length()); close(rc); - ALOGD("STACK TRACE for %p saved in %s", this, name); + ALOGI("STACK TRACE for %p saved in %s", this, name); } else ALOGE("FAILED TO PRINT STACK TRACE for %p in %s: %s", this, name, strerror(errno));