Make Linux stack walking code (DEBUG only) print library and offset information even when symbol is unavailable. b=174168 r=bbaetz sr=bzbarsky a=rjesup

This commit is contained in:
dbaron%fas.harvard.edu 2002-10-14 23:59:31 +00:00
Родитель bff3c166a9
Коммит 22cde85310
2 изменённых файлов: 24 добавлений и 26 удалений

Просмотреть файл

@ -1178,16 +1178,20 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
if (--skip <= 0) {
Dl_info info;
int ok = dladdr((void*) pc, &info);
if (!ok)
goto unknown;
if (!ok) {
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
continue;
}
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
const char * symbol = info.dli_sname;
if (!symbol)
goto unknown;
int len = strlen(symbol);
if (! len)
goto unknown;
int len;
if (!symbol || !(len = strlen(symbol))) {
fprintf(aStream, "UNKNOWN [%s +0x%08X]\n",
info.dli_fname, foff);
continue;
}
char demangled[4096] = "\0";
@ -1199,14 +1203,9 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
}
PRUint32 off = (char*)pc - (char*)info.dli_saddr;
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
fprintf(aStream, "%s+0x%08X [%s +0x%08X]\n",
symbol, off, info.dli_fname, foff);
}
continue;
unknown:
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
}
}
#elif defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))

Просмотреть файл

@ -1178,16 +1178,20 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
if (--skip <= 0) {
Dl_info info;
int ok = dladdr((void*) pc, &info);
if (!ok)
goto unknown;
if (!ok) {
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
continue;
}
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
const char * symbol = info.dli_sname;
if (!symbol)
goto unknown;
int len = strlen(symbol);
if (! len)
goto unknown;
int len;
if (!symbol || !(len = strlen(symbol))) {
fprintf(aStream, "UNKNOWN [%s +0x%08X]\n",
info.dli_fname, foff);
continue;
}
char demangled[4096] = "\0";
@ -1199,14 +1203,9 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
}
PRUint32 off = (char*)pc - (char*)info.dli_saddr;
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
fprintf(aStream, "%s+0x%08X [%s +0x%08X]\n",
symbol, off, info.dli_fname, foff);
}
continue;
unknown:
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
}
}
#elif defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))