A few tweaks to RefBase debugging

- stacks are now saved in /data/debug which must be
  created and writable by the user.

- removed "always fatal" DEBUG_REFS option, it wasn't
  really needed.

- DEBUG_REFS_ENABLED_BY_DEFAULT is not the default anymore
  (usually people want to target which refs they're tracking)

Change-Id: I37fae72e9dacde6ce1fa8f7dbe2bc01b1a1b95e5
This commit is contained in:
Mathias Agopian 2013-03-18 20:31:18 -07:00
parent 79fb99d0de
commit 19437cb84c

View File

@ -35,10 +35,18 @@
// compile with refcounting debugging enabled // compile with refcounting debugging enabled
#define DEBUG_REFS 0 #define DEBUG_REFS 0
#define DEBUG_REFS_FATAL_SANITY_CHECKS 0
#define DEBUG_REFS_ENABLED_BY_DEFAULT 1 // whether ref-tracking is enabled by default, if not, trackMe(true, false)
// needs to be called explicitly
#define DEBUG_REFS_ENABLED_BY_DEFAULT 0
// whether callstack are collected (significantly slows things down)
#define DEBUG_REFS_CALLSTACK_ENABLED 1 #define DEBUG_REFS_CALLSTACK_ENABLED 1
// folder where stack traces are saved when DEBUG_REFS is enabled
// this folder needs to exist and be writable
#define DEBUG_REFS_CALLSTACK_PATH "/data/debug"
// log all reference counting operations // log all reference counting operations
#define PRINT_REFS 0 #define PRINT_REFS 0
@ -96,11 +104,7 @@ public:
bool dumpStack = false; bool dumpStack = false;
if (!mRetain && mStrongRefs != NULL) { if (!mRetain && mStrongRefs != NULL) {
dumpStack = true; dumpStack = true;
#if DEBUG_REFS_FATAL_SANITY_CHECKS
LOG_ALWAYS_FATAL("Strong references remain!");
#else
ALOGE("Strong references remain:"); ALOGE("Strong references remain:");
#endif
ref_entry* refs = mStrongRefs; ref_entry* refs = mStrongRefs;
while (refs) { while (refs) {
char inc = refs->ref >= 0 ? '+' : '-'; char inc = refs->ref >= 0 ? '+' : '-';
@ -114,11 +118,7 @@ public:
if (!mRetain && mWeakRefs != NULL) { if (!mRetain && mWeakRefs != NULL) {
dumpStack = true; dumpStack = true;
#if DEBUG_REFS_FATAL_SANITY_CHECKS
LOG_ALWAYS_FATAL("Weak references remain:");
#else
ALOGE("Weak references remain!"); ALOGE("Weak references remain!");
#endif
ref_entry* refs = mWeakRefs; ref_entry* refs = mWeakRefs;
while (refs) { while (refs) {
char inc = refs->ref >= 0 ? '+' : '-'; char inc = refs->ref >= 0 ? '+' : '-';
@ -199,7 +199,7 @@ public:
{ {
char name[100]; char name[100];
snprintf(name, 100, "/data/%p.stack", this); snprintf(name, 100, 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, 644);
if (rc >= 0) { if (rc >= 0) {
write(rc, text.string(), text.length()); write(rc, text.string(), text.length());
@ -258,12 +258,6 @@ private:
ref = *refs; ref = *refs;
} }
#if DEBUG_REFS_FATAL_SANITY_CHECKS
LOG_ALWAYS_FATAL("RefBase: removing id %p on RefBase %p"
"(weakref_type %p) that doesn't exist!",
id, mBase, this);
#endif
ALOGE("RefBase: removing id %p on RefBase %p" ALOGE("RefBase: removing id %p on RefBase %p"
"(weakref_type %p) that doesn't exist!", "(weakref_type %p) that doesn't exist!",
id, mBase, this); id, mBase, this);