在c/c++代码中Androidcrash经常会产生一些crashlog,它们可以通过“adb logcat -v time”来查看或执行“adb pull /data/tombstones”命令得到tombstoneslog。这里简单描述这类log的结构如何阅读,以及使用stack工具定位。
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'
然后是进程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 [email protected].
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]
stack工具其实是一个python脚本,您可以使用它去过滤crashlog,其实质是使用addr2line定位问题。
点击这里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
下载之后,我们需要稍微修改一下,才能使用,具体修改如下函数:
#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
……
……
到此脚本修改完成,接下来我们来运行脚本。
在运行脚本之前需要确认系统已经安装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