在c/c++代碼中Androidcrash經常會產生一些crashlog,它們可以通過“adb logcat -v time”來查看或執行“adb pull /data/tombstones”命令得到tombstoneslog。這里簡單描述這類log的結構如何閱讀,以及使用stack工具定位。
1.crash log的結構
crashlog是以系統屬性“ro.build.fingerprint”的編譯信息開始的,可以adb shell getprop |grep “ro.build.fingerprint”進行校驗。例如:
10-2918:32:06.961 I/DEBUG ( 1229): *** *** *** *** *** *** *** *** ****** *** *** *** *** *** ***
10-2918:32:06.961 I/DEBUG ( 1229): Build fingerprint:'
- generic/generic/generic:4.0.4/IMM76D/eng.kuangjp.20120504.181216:eng/debug,test-keys'
- generic/generic/generic:4.0.4/IMM76D/eng.kuangjp.20120504.181216:eng/debug,test-keys'
然后是進程ID(theprocess ID number) 和線程ID(threadid),已知pid,我們就可以在/proc/<pid>目錄中參看該進程的信息(當然那是crash之前的信息)。
這里pid和tid是相同的,如果crash發生在子線程,這tid和pid將是不同的。在linux系統中子線程自身也是一個進程,有自己的“task_struct”結構,他是通過fork函數創建,和父進程共享地址空間(addressspace)和其他數據(otherdata)。
10-2918:32:06.961 I/DEBUG ( 1229):pid:316, tid: 316 >>>system_server <<<
接下來是導致進程終止的信號(signal)以及一些寄存器的值。
10-2918:32:06.961 I/DEBUG ( 1229):signal6 (SIGABRT), code 0 (?),fault addr --------
10-2918:32:06.961 I/DEBUG ( 1229): r0 00000009 r1 c0186201 r2beba94f8 r3 beba94f4
10-2918:32:06.961 I/DEBUG ( 1229): r4 018350e0 r5 01835110 r6018350b0 r7 00000036
10-2918:32:06.961 I/DEBUG ( 1229): r8 00000001 r9 018350cc 10018350b8 fp 00000000
10-2918:32:06.961 I/DEBUG ( 1229): ip 40168480 sp beba94d8 lr4004db85 pc 400327ac cpsr 80000010
10-2918:32:06.961 I/DEBUG ( 1229): d0 0000000000000000 d1 0000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d2 0000000400000000 d3 0192c0b800000000
10-2918:32:06.961 I/DEBUG ( 1229): d4 0000000000000000 d5 0000000000000001
10-2918:32:06.961 I/DEBUG ( 1229): d6 0000000000000000 d7 0000000100000000
10-2918:32:06.961 I/DEBUG ( 1229): d8 0000000000000000 d9 0000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d10 0000000000000000 d110000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d12 0000000000000000 d130000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d14 0000000000000000 d150000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d16 0000000040ac9848 d170000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d18 0000000000000000 d190000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d20 0000000000000000 d210000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d22 0000000000000000 d230000000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d24 3e66376972bea4d0 d25bff0000000000000
10-2918:32:06.961 I/DEBUG ( 1229): d26 3ff6e14600000000 d27bfa6b17aa4ca017b
10-2918:32:06.961 I/DEBUG ( 1229): d28 c002a305cdf4cd18 d29bfd40ca2637de7af
10-2918:32:06.961 I/DEBUG ( 1229): d30 3c62105b6732a3f6 d31be751507ebc00000
10-2918:32:06.961 I/DEBUG ( 1229): scr 60000012
10-2918:32:06.961 I/DEBUG ( 1229):
緊接着就是出現問題的調用棧。#00是棧指針的深度,"pc<addr>"是棧中PC地址,有時,使用“lr(linkregister)”代替PC。在"pc<addr>"之后是包含代碼的文件。當然這里的地址沒有任何意義,因為沒有跟代碼中的標志對應。下一節將會使用stack工具進行代碼定位。
10-2918:32:07.221 I/DEBUG ( 1229): #00 pc 0000c7ac /system/lib/libc.so (__ioctl)
10-2918:32:07.221 I/DEBUG ( 1229): #01 pc 00027b82 /system/lib/libc.so (ioctl)
10-2918:32:07.221 I/DEBUG ( 1229): #02 pc 0001aa6c /system/lib/libbinder.so(_ZN7android14IPCThreadState14talkWithDriverEb)
10-2918:32:07.231 I/DEBUG ( 1229): #03 pc 0001b350 /system/lib/libbinder.so(_ZN7android14IPCThreadState14joinThreadPoolEb)
10-2918:32:07.231 I/DEBUG ( 1229): #04 pc 0000136c /system/lib/libsystem_server.so (system_init)
10-2918:32:07.231 I/DEBUG ( 1229): #05 pc 0000b14c /system/lib/libandroid_servers.so
10-2918:32:07.231 I/DEBUG ( 1229): #06 pc 0001f9f0 /system/lib/libdvm.so (dvmPlatformInvoke)
10-2918:32:07.231 I/DEBUG ( 1229): #07 pc 000598fe /system/lib/libdvm.so(_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
10-2918:32:07.231 I/DEBUG ( 1229):
最后是當前棧指針地址和代碼dump,每行包含4個字節(一個機器字),地址是升序的,
堆棧中的字被映射到它屬於的存儲器區域。
10-2918:32:07.231 I/DEBUG ( 1229): code around pc:
10-2918:32:07.231 I/DEBUG ( 1229): 4003278c e3a070db ef000000 e8bd0090e1b00000 .p..............
10-2918:32:07.231 I/DEBUG ( 1229): 4003279c 512fff1e ea00b567 e92d0090e3a07036 ../Qg.....-.6p..
10-2918:32:07.231 I/DEBUG ( 1229): 400327ac ef000000 e8bd0090 e1b00000512fff1e ............../Q
10-2918:32:07.231 I/DEBUG ( 1229): 400327bc ea00b560 e92d0090 e3a07091ef000000 `.....-..p......
10-2918:32:07.231 I/DEBUG ( 1229): 400327cc e8bd0090 e1b00000 512fff1eea00b559 ........../QY...
10-2918:32:07.231 I/DEBUG ( 1229):
10-2918:32:07.231 I/DEBUG ( 1229): code around lr:
10-2918:32:07.231 I/DEBUG ( 1229): 4004db64 bf00bd70 0001b9a4 0001b940b503b40e p.......@.......
10-2918:32:07.231 I/DEBUG ( 1229): 4004db74 f852aa03 1d131b04 93019a04ee10f7e4 ..R.............
10-2918:32:07.231 I/DEBUG ( 1229): 4004db84 400ce8bd 4770b003 000000000b30ec41 ...@..pG....A.0.
10-2918:32:07.231 I/DEBUG ( 1229): 4004db94 f3c1460b b530510a f023b97943034300 .F...Q0.y.#..C.C
10-2918:32:07.231 I/DEBUG ( 1229): 4004dba4 eddfd065 ee601b34 ec510ba148390b30 e...4.`...Q.0.9H
10-2918:32:07.231 I/DEBUG ( 1229):
10-2918:32:07.231 I/DEBUG ( 1229): stack:
10-2918:32:07.231 I/DEBUG ( 1229): beba9498 00000000
10-2918:32:07.231 I/DEBUG ( 1229): beba949c beba94cc [stack]
10-2918:32:07.231 I/DEBUG ( 1229): beba94a0 00000000
10-2918:32:07.231 I/DEBUG ( 1229): beba94a4 500ce1c4 /dev/binder
10-2918:32:07.231 I/DEBUG ( 1229): beba94a8 00000064
10-2918:32:07.231 I/DEBUG ( 1229): beba94ac 00000064
10-2918:32:07.231 I/DEBUG ( 1229): beba94b0 00000064
10-2918:32:07.231 I/DEBUG ( 1229): beba94b4 500ce228 /dev/binder
10-2918:32:07.231 I/DEBUG ( 1229): beba94b8 00000001
10-2918:32:07.231 I/DEBUG ( 1229): beba94bc ffffffff
10-2918:32:07.231 I/DEBUG ( 1229): beba94c0 00000001
10-2918:32:07.231 I/DEBUG ( 1229): beba94c4 00000003
10-2918:32:07.231 I/DEBUG ( 1229): beba94c8 beba94f6 [stack]
10-2918:32:07.231 I/DEBUG ( 1229): beba94cc 00000025
10-2918:32:07.231 I/DEBUG ( 1229): beba94d0 01885bb0 [heap]
10-2918:32:07.231 I/DEBUG ( 1229): beba94d4 00000001
10-2918:32:07.231 I/DEBUG ( 1229): #00 beba94d8 018350e0 [heap]
10-2918:32:07.231 I/DEBUG ( 1229): beba94dc beba94f8 [stack]
10-2918:32:07.231 I/DEBUG ( 1229): #01 beba94e0 00000009
10-2918:32:07.231 I/DEBUG ( 1229): beba94e4 beba94f4 [stack]
10-2918:32:07.231 I/DEBUG ( 1229): beba94e8 4015aa6f /system/lib/libbinder.so
10-2918:32:07.231 I/DEBUG ( 1229): beba94ec c0186201
10-2918:32:07.231 I/DEBUG ( 1229): beba94f0 beba94f8 [stack]
10-2918:32:07.231 I/DEBUG ( 1229): beba94f4 018b9590 [heap]
2.stack工具的使用
stack工具其實是一個python腳本,您可以使用它去過濾crashlog,其實質是使用addr2line定位問題。
2.1Download stack工具
點擊這里stack下載stackpython腳本,具體內容如下:
#!/usr/bin/python2.4-E
importgetopt
importos
importre
importstring
importsys
importgetpass
importurllib
importsubprocess
defPrintUsage():
print" usage: " + sys.argv[0] + " [options] [FILE]"
print" --symbols-dir=path"
print" the path to a symbols dir, such as=/tmp/out/target/product/dream/symbols"
print" --symbols-zip=path"
print" the path to a symbols zip file, such as=dream-symbols-12345.zip"
print" --auto"
print" attempt to:"
print" 1) automatically find the build number in the crash"
print" 2) if it's an official build, download the symbols "
print" from the build server, and use them"
print" FILE should contain a stack trace in it somewhere"
print" the tool will find that and re-print it with"
print" source files and line numbers. If you don't"
print" pass FILE, or if file is -, it reads from"
print" stdin."
sys.exit(1)
defFindSymbolsDir():
cmd= "CALLED_FROM_SETUP=true make -f build/core/envsetup.mk "\
+"dumpvar-abs-TARGET_OUT_UNSTRIPPED"
stream= os.popen(cmd)
str= stream.read()
stream.close()
returnstr.strip()
#returns a list containing the function name and the file/lineno
defCallAddr2Line(lib, addr):
uname= os.uname()[0]
ifuname == "Darwin":
proc= os.uname()[-1]
ifproc == "i386":
uname= "darwin-x86"
else:
uname= "darwin-ppc"
iflib != "":
#cmd= "./prebuilt/" + uname +"/toolchain-eabi-4.2.1/bin/arm-eabi-addr2line" \
cmd= "arm-eabi-addr2line" \
+" -f -e " + SYMBOLS_DIR + lib \
+" 0x" + addr
stream= os.popen(cmd)
lines= stream.readlines()
list= map(string.strip, lines)
else:
list= []
iflist != []:
#Name like "move_forward_type<JavaVMOption>" causestroubles
mangled_name= re.sub('<', '\<', list[0]);
mangled_name= re.sub('>', '\>', mangled_name);
#cmd= "./prebuilt/" + uname +"/toolchain-eabi-4.2.1/bin/arm-eabi-c++filt "\
cmd= "arm-eabi-c++filt "\
+mangled_name
stream= os.popen(cmd)
list[0]= stream.readline()
stream.close()
list= map(string.strip, list)
else:
list= [ "(unknown)", "(unknown)" ]
returnlist
classSSOCookie(object):
"""
createsa cookie file so we can download files from the build server
"""
def__init__(self, cookiename=".sso.cookie", keep=False):
self.sso_server= "login.corp.google.com"
self.name= cookiename
self.keeper= keep
self.tmp_opts= ".curl.options"
ifnot os.path.exists(self.name):
user= os.environ['USER']
print"\n%s, to access the symbols, please enter your LDAP " %user,
password= getpass.getpass()
params= urllib.urlencode({"u": user, "pw": password})
fd= os.open(self.tmp_opts, os.O_RDWR | os.O_CREAT, 0600)
os.write(fd,'-b "%s"\n' % self.name)
os.write(fd,'-c "%s"\n' % self.name)
os.write(fd,'-s"\n-L\n-d "%s"\n' % params)
os.write(fd,'url = "https://%s/login?ssoformat=CORP_SSO"\n' %
self.sso_server)
#login to SSO
response= os.popen("/usr/bin/curl -K %s" % self.tmp_opts)
response.close()
ifos.path.exists(self.tmp_opts):
os.remove(self.tmp_opts)
ifos.path.exists(self.name):
os.chmod(self.name,0600)
else:
print"Could not log in to SSO"
sys.exit(1)
def__del__(self):
"""cleanup"""
ifnot self.keeper:
os.remove(self.name)
classNoBuildIDException(Exception):
pass
defFindBuildFingerprint(lines):
"""
Searchesthe given file (array of lines) for the build fingerprintinformation
"""
fingerprint_regex= re.compile("^.*Build fingerprint:\s'(?P<fingerprint>.*)'")
forline in lines:
fingerprint_search= fingerprint_regex.match(line.strip())
iffingerprint_search:
returnfingerprint_search.group('fingerprint')
returnNone # didn't find the fingerprint string, so return none
classSymbolDownloadException(Exception):
pass
DEFAULT_SYMROOT= "/tmp/symbols"
defDownloadSymbols(fingerprint, cookie):
"""
Attemptsto download the symbols from the build server, extracts them,
andreturns the path. Takes the fingerprint from the pasted stack trace
andthe SSOCookie
"""
iffingerprint is None:
return(None, None)
symdir= "%s/%s" % (DEFAULT_SYMROOT, hash(fingerprint))
ifnot os.path.exists(symdir):
os.makedirs(symdir)
#build server figures out the branch based on the CL
params= {
'op':"GET-SYMBOLS-LINK",
'fingerprint':fingerprint,
}
url= urllib.urlopen("http://android-build/buildbot-update?",
urllib.urlencode(params)).readlines()[0]
ifurl == "":
raiseSymbolDownloadException, "Build server down? Failed to findsyms..."
regex_str= (r'(?P<baseURL>http\:\/\/android-build\/builds\/.*\/[0-9]+' +
r'\/)(?P<img>.*)')
url_regex= re.compile(regex_str)
url_match= url_regex.match(url)
ifurl_match is None:
raiseSymbolDownloadException, "Unexpected results from build serverURL..."
baseURL= url_match.group('baseURL')
img= url_match.group('img')
symbolfile= img.replace("-img-", "-symbols-")
symurl= baseURL + symbolfile
localsyms= symdir + symbolfile
ifnot os.path.exists(localsyms):
print"downloading %s ..." % symurl
curlcmd= ("""/usr/bin/curl -b %s -sL -w %%{http_code} -o %s%s""" %
(cookie.name,localsyms, symurl))
(fi,fo,fe)= os.popen3(curlcmd)
fi.close()
code= fo.read()
err= fe.read()
iferr != "":
raiseSymbolDownloadException, "stderr from curl download: %s" %err
ifcode != "200":
raiseSymbolDownloadException, "Faied to download %s" % symurl
else:
print"using existing cache for symbols"
print"extracting %s..." % symbolfile
saveddir= os.getcwd()
os.chdir(symdir)
unzipcode= subprocess.call(["unzip", "-qq", "-o",localsyms])
ifunzipcode > 0:
raiseSymbolDownloadException, ("failed to extract symbol files (%s)."
%localsyms)
os.chdir(saveddir)
return(symdir, "%s/out/target/product/dream/symbols" % symdir)
defUnzipSymbols(symbolfile):
"""Unzipsa file to DEFAULT_SYMROOT and returns the unzipped location.
Args:
symbolfile:The .zip file to unzip
Returns:
Atuple containing (the directory into which the zip file wasunzipped,
thepath to the "symbols" directory in the unzipped file). Toclean
up,the caller can delete the first element of the tuple.
Raises:
SymbolDownloadException:When the unzip fails.
"""
symdir= "%s/%s" % (DEFAULT_SYMROOT, hash(symbolfile))
ifnot os.path.exists(symdir):
os.makedirs(symdir)
print"extracting %s..." % symbolfile
saveddir= os.getcwd()
os.chdir(symdir)
unzipcode= subprocess.call(["unzip", "-qq", "-o",symbolfile])
ifunzipcode > 0:
raiseSymbolDownloadException, ("failed to extract symbol files (%s)."
%symbolfile)
os.chdir(saveddir)
return(symdir, "%s/out/target/product/dream/symbols" % symdir)
defPrintTraceLines(traceLines):
maxlen= max(map(lambda tl: len(tl[1]), traceLines))
print"Stack Trace:"
print" ADDR " + "FUNCTION".ljust(maxlen) + " FILE:LINE"
fortl in traceLines:
print" " + tl[0] + " " + tl[1].ljust(maxlen) + " " + tl[2]
return
defPrintValueLines(valueLines):
print"Stack Data:"
print" ADDR VALUE " + "FILE:LINE/FUNCTION"
forvl in valueLines:
print" " + vl[1] + " " + vl[2] + " " +vl[4]
ifvl[4] != "":
print" " + vl[3]
return
defConvertTrace(lines):
PROCESS_INFO_LINE= re.compile("(pid: [0-9]+, tid: [0-9]+.*)")
SIGNAL_LINE= re.compile("(signal [0-9]+ \(.*\).*)")
REGISTER_LINE= re.compile("(([ ]*[0-9a-z]{2} [0-9a-f]{8}){4})")
TRACE_LINE= re.compile("(.*)\#([0-9]+) (..) ([0-9a-f]{3})([0-9a-f]{5}) ([^\r\n \t]*)")
VALUE_LINE= re.compile("(.*)([0-9a-f]{2})([0-9a-f]{6}) ([0-9a-f]{3})([0-9a-f]{5}) ([^\r\n \t]*)")
THREAD_LINE= re.compile("(.*)(\-\-\- ){15}\-\-\-")
traceLines= []
valueLines= []
forline in lines:
header= PROCESS_INFO_LINE.search(line)
ifheader:
printheader.group(1)
continue
header= SIGNAL_LINE.search(line)
ifheader:
printheader.group(1)
continue
header= REGISTER_LINE.search(line)
ifheader:
printheader.group(1)
continue
ifTRACE_LINE.match(line):
match= TRACE_LINE.match(line)
groups= match.groups()
ifgroups[5] == "<unknown>" or groups[5] == "[heap]"or groups[5] == "[stack]":
traceLines.append((groups[3]+groups[4],groups[5], groups[5]))
else:
info= CallAddr2Line(groups[5], groups[4])
traceLines.append((groups[3]+groups[4],info[0], info[1]))
ifVALUE_LINE.match(line):
match= VALUE_LINE.match(line)
groups= match.groups()
ifgroups[5] == "<unknown>" or groups[5] == "[heap]"or groups[5] == "[stack]" or groups[5] == "":
valueLines.append((groups[0],groups[1]+groups[2], groups[3]+groups[4], groups[5], ""))
else:
info= CallAddr2Line(groups[5], groups[4])
valueLines.append((groups[0],groups[1]+groups[2], groups[3]+groups[4], info[0], info[1]))
header= THREAD_LINE.search(line)
ifheader:
iflen(traceLines) > 0:
PrintTraceLines(traceLines)
iflen(valueLines) > 0:
PrintValueLines(valueLines)
traceLines= []
valueLines= []
print"-----------------------------------------------------\n"
iflen(traceLines) > 0:
PrintTraceLines(traceLines)
iflen(valueLines) > 0:
PrintValueLines(valueLines)
SYMBOLS_DIR= FindSymbolsDir()
if__name__ == '__main__':
try:
options,arguments = getopt.getopt(sys.argv[1:], "",
["auto","symbols-dir=", "symbols-zip=", "help"])
exceptgetopt.GetoptError, error:
PrintUsage()
AUTO= False
zipArg= None
foroption, value in options:
ifoption == "--help":
PrintUsage()
elifoption == "--symbols-dir":
SYMBOLS_DIR= value
elifoption == "--symbols-zip":
zipArg= value
elifoption == "--auto":
AUTO= True
iflen(arguments) > 1:
PrintUsage()
ifAUTO:
cookie= SSOCookie(".symbols.cookie")
iflen(arguments) == 0 or arguments[0] == "-":
print"Reading native crash info from stdin"
f= sys.stdin
else:
print"Searching for native crashes in %s" % arguments[0]
f= open(arguments[0], "r")
lines= f.readlines()
rootdir= None
ifAUTO:
fingerprint= FindBuildFingerprint(lines)
print"fingerprint:", fingerprint
rootdir,SYMBOLS_DIR = DownloadSymbols(fingerprint, cookie)
elifzipArg is not None:
rootdir,SYMBOLS_DIR = UnzipSymbols(zipArg)
print"Reading symbols from", SYMBOLS_DIR
lines= ConvertTrace(lines)
ifrootdir is not None:
#be a good citizen and clean up...os.rmdir and os.removedirs() don'twork
cmd= "rm -rf \"%s\"" % rootdir
print"\ncleaning up (%s)" % cmd
os.system(cmd)
#vi: ts=2 sw=2
2.2修改stack腳本
下載之后,我們需要稍微修改一下,才能使用,具體修改如下函數:
#returns a list containing the function name and the file/lineno
defCallAddr2Line(lib, addr):
uname = os.uname()[0]
if uname == "Darwin":
proc = os.uname()[-1]
if proc == "i386":
uname = "darwin-x86"
else:
uname = "darwin-ppc"
if lib != "":
#cmd ="./prebuilt/" + uname +"/toolchain-eabi-4.2.1/bin/arm-eabi-addr2line" \
cmd = "arm-eabi-addr2line"\
+ " -f -e " +SYMBOLS_DIR + lib \
+ " 0x" + addr
stream = os.popen(cmd)
lines = stream.readlines()
list = map(string.strip, lines)
else:
list = []
if list != []:
# Name like"move_forward_type<JavaVMOption>" causes troubles
mangled_name = re.sub('<', '\<',list[0]);
mangled_name = re.sub('>', '\>',mangled_name);
#cmd = "./prebuilt/" + uname+ "/toolchain-eabi-4.2.1/bin/arm-eabi-c++filt "\
cmd = "arm-eabi-c++filt "\
+ mangled_name
stream = os.popen(cmd)
list[0] = stream.readline()
stream.close()
list = map(string.strip, list)
else:
list = [ "(unknown)","(unknown)" ]
return list
注意紅色標志部分,這部分是需要修改的代碼段,這里假設我將該腳本放在Android源代碼根目錄的上一級目錄。
$pwd
/ProjectSdks/R8625SSNSKQLYA10145451
這里R8625SSNSKQLYA10145451(ics4.0 version)是源代碼根目錄,所以我們將stack腳本放在ProjectSdks這級目錄。之后修改腳本如下:
……
…...
#cmd = "./prebuilt/" + uname +"/toolchain-eabi-4.2.1/bin/arm-eabi-addr2line" \
cmd ="./R8625SSNSKQLYA10145451/prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-addr2line"\
+ " -f -e " +SYMBOLS_DIR + lib \
+ " 0x" + addr
……
……
到此腳本修改完成,接下來我們來運行腳本。
2.3運行stack腳本
在運行腳本之前需要確認系統已經安裝python2.4版本或以上版本,可以通過執行如下命令來確認:
$python
Python2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC4.6.1] on linux2
Type"help", "copyright", "credits" or"license" for more information.
>>>
這里的機器的版本是Python2.7.2。現在我們開始運行腳本。
ProjectSdks$python stack--symbols-dir=./R8625SSNSKQLYA10145451/out/target/product/msm7627a/symbols logcat.txt
結果如下:
shmem/dalvik-LinearAlloc':No such file
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
signal6 (SIGABRT) at 0x00000f04 (code=0)
pid:3844, tid: 3844 >>> system_server <<<
signal6 (SIGABRT), code 0 (?), fault addr --------
r00061be90 r1 00000080 r2 00000002 r3 00000000
r40061be90 r5 00000000 r6 00000002 r7 000000f0
r800000000 r9 0061be90 10 00000000 fp 00000001
ip00000002 sp bedc9188 lr 40024530 pc 4001f7e8
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
sh:arm-eabi-c++filt: not found
StackTrace:
ADDR FUNCTION FILE:LINE
0000d7e8 /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/arch-arm/bionic/atomics_arm.S:182
0001252c /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/bionic/pthread.c:951
0005dcc6 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Thread.h:433
0005e502 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Sync.cpp:992
0002099c /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/mterp/out/InterpAsm-armv7-a-neon.S:828
000356c4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Interp.cpp:1965
0006c66e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Stack.cpp:522
00059310 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1988
0004936e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/libnativehelper/include/nativehelper/jni.h:633
00064b5e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/core/jni/android_util_Binder.cpp:291
00017e88 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/Binder.cpp:107
0001b192 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:1030
0001b36e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:468
0000136c /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/cmds/system_server/library/system_init.cpp:105
0000b1a4 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/services/jni/com_android_server_SystemServer.cpp:28
000200b0 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/arch/arm/CallEABI.S:258
00059f9e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1184
0000d7e8 /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/arch-arm/bionic/atomics_arm.S:182
0001252c /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/bionic/pthread.c:951
0005dcc6 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Thread.h:433
0005e502 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Sync.cpp:992
0002099c /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/mterp/out/InterpAsm-armv7-a-neon.S:828
000356c4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Interp.cpp:1965
0006c66e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Stack.cpp:522
00059310 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1988
0004936e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/libnativehelper/include/nativehelper/jni.h:633
00064b5e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/core/jni/android_util_Binder.cpp:291
00017e88 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/Binder.cpp:107
0001b192 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:1030
0001b36e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:468
0000136c /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/cmds/system_server/library/system_init.cpp:105
0000b1a4 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/services/jni/com_android_server_SystemServer.cpp:28
000200b0 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/arch/arm/CallEABI.S:258
00059f9e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1184
0000d7ec /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/arch-arm/bionic/atomics_arm.S:183
00012840 /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/bionic/pthread.c:1477
000207b0 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/include/utils/threads.h:462
0000d7e8 /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/arch-arm/bionic/atomics_arm.S:182
0001252c /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/bionic/pthread.c:951
0005dcc6 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Thread.h:433
0005e502 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Sync.cpp:992
0002099c /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/mterp/out/InterpAsm-armv7-a-neon.S:828
000356c4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Interp.cpp:1965
0006c66e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Stack.cpp:522
00059310 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1988
0004936e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/libnativehelper/include/nativehelper/jni.h:633
00064b5e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/core/jni/android_util_Binder.cpp:291
00017e88 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/Binder.cpp:107
0001b192 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:1030
0001b36e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:468
0000136c /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/cmds/system_server/library/system_init.cpp:105
0000b1a4 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/services/jni/com_android_server_SystemServer.cpp:28
000200b0 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/arch/arm/CallEABI.S:258
00059f9e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1184
0000d7e8 /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/arch-arm/bionic/atomics_arm.S:182
0001252c /ProjectSdks/R8625SSNSKQLYA10145451/bionic/libc/bionic/pthread.c:951
0005dcc6 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Thread.h:433
0005e502 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Sync.cpp:992
0002099c /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/mterp/out/InterpAsm-armv7-a-neon.S:828
000356c4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Interp.cpp:1965
0006c66e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/interp/Stack.cpp:522
00059310 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1988
0004936e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/libnativehelper/include/nativehelper/jni.h:633
00064b5e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/core/jni/android_util_Binder.cpp:291
00017e88 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/Binder.cpp:107
0001b192 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:1030
0001b36e /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/libs/binder/IPCThreadState.cpp:468
0000136c /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/cmds/system_server/library/system_init.cpp:105
0000b1a4 /ProjectSdks/R8625SSNSKQLYA10145451/frameworks/base/services/jni/com_android_server_SystemServer.cpp:28
000200b0 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/arch/arm/CallEABI.S:258
00059f9e /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Jni.cpp:1184
StackData:
ADDR VALUE FILE:LINE/FUNCTION
befe2148 00000008
befe214c b00059a5 ??:0
befe2150 0000097a
befe2154 4009b7fb ??:0
befe2158 01edfa90
befe215c ab400025
befe2160 48a84b40
befe2164 4bcdbe40 (unknown)
(unknown)
befe2168 01ee1e28
befe216c 00000007
befe2170 48a84aec
befe2174 4084c0b4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/CheckJni.cpp:1676
befe2178 48a84ae4
befe217c 00000001
befe2180 df0027ad
befe2184 00000000
befe2188 0206ad08
befe218c 00000002
befe2190 0206acf8
befe2194 408defe0 ??:0
befe2198 01ee1e28
befe219c 00000000
befe21a0 00000000
befe21a4 0206ad08
befe21a8 00000000
befe21ac 40889cc9/ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp:90
be9f5148 4bc4e7c0 (unknown)
(unknown)
be9f514c 5c600025
be9f5150 01756a90
be9f5154 401dd0cf ??:0
be9f5158 5c600025
be9f515c 401f88f7 ??:0
be9f5160 4bc4f538 (unknown)
(unknown)
be9f5164 01758e28
be9f5168 4bc4f538 (unknown)
(unknown)
be9f516c 401f984d ??:0
be9f5170 4bc4f538 (unknown)
(unknown)
be9f5174 408520b4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/Init.cpp:237
be9f5178 48a8cb28
be9f517c 00000001
be9f5180 df0027ad
be9f5184 00000000
be9f5188 01917f00
be9f518c 00000001
be9f5190 01917ef0
be9f5194 408e4fe0 ??:0
be9f5198 01758e28
be9f519c 00000000
be9f51a0 00000000
be9f51a4 01917f00
be9f51a8 00000000
be9f51ac 4088fcc9 DexDataMap.cpp:0
bee89fc0 bee89fec
bee89fc4 eef0002d
bee89fc8 eef0002d
bee89fcc eef0002d
bee89fd0 400a7598
bee89fd4 3b9aca00
bee89fd8 00000000
bee89fdc f32a7070
bee89fe0 00000003
bee89fe4 01ec57d8
bee89fe8 01ec57d8
bee89fec 01ec5758
bee89ff0 ffffffcc
bee89ff4 bee8a020
bee89ff8 01ec57d8
bee89ffc ffffffff
bee8a000 01ec57d8
bee8a004 bee8a020
bee8a008 01ec5758
bee8a00c 01ec57d8
bee8a010 01ec5758
bee8a014 01ec5758
bee8a018 01ec57d8
bee8a01c 505b87b3 ??:0
bef69148 4bd737c0 (unknown)
(unknown)
bef6914c 67f00025
bef69150 00cdff20
bef69154 4bc9baf4
bef69158 00000da3
bef6915c 40149cb5 ??:0
bef69160 40a88000 (unknown)
(unknown)
bef69164 40a88000 (unknown)
(unknown)
bef69168 4bd71850 (unknown)
(unknown)
bef6916c 4bc9ba90
bef69170 4bd71850 (unknown)
(unknown)
bef69174 4083a0b4 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/mterp/out/InterpC-portable.cpp:3474
bef69178 4bc9ba88
bef6917c 00000001
bef69180 df0027ad
bef69184 00000000
bef69188 00d58028
bef6918c 00000002
bef69190 00d58018
bef69194 408ccfe0 ??:0
bef69198 00b5ae28
bef6919c 00000000
bef691a0 00000000
bef691a4 00d58028
bef691a8 00000000
bef691ac 40877cc9 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/reflect/Annotation.cpp:1944
bedc9148 00000004
bedc914c 40865cbd /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/analysis/CodeVerify.cpp:5796
bedc9150 00490a90
bedc9154 00492e28
bedc9158 00000008
bedc915c 00490a90
bedc9160 00492e28
bedc9164 401f97f5 ??:0
bedc9168 00490a90
bedc916c 00000008
bedc9170 408c2fe0 ??:0
bedc9174 00492e28
bedc9178 c6e00029
bedc917c 40866673 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/analysis/DexPrepare.cpp:955
bedc9180 df0027ad
bedc9184 00000000
bedc9188 0061be90
bedc918c 00000001
bedc9190 0061be80
bedc9194 408c2fe0 ??:0
bedc9198 00492e28
bedc919c 00000000
bedc91a0 00000000
bedc91a4 0061be90
bedc91a8 00000000
bedc91ac 4086dcc9 /ProjectSdks/R8625SSNSKQLYA10145451/dalvik/vm/jdwp/JdwpEvent.cpp:147
注意紅色部分信息
參考url:
http://bootloader.wikidot.com/linux:android:crashlog