如何阅读Android crash log以及stack trace

    简介

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'


然后是进程IDtheprocess ID number) 和线程IDthreadid),已知pid,我们就可以在/proc/<pid>目录中参看该进程的信息(当然那是crash之前的信息)。

这里pidtid是相同的,如果crash发生在子线程,这tidpid将是不同的。在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地址,有时,使用“lrlinkregister”代替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]

      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

print" usage: " + sys.argv[0] + " [options] [FILE]"

print

print" --symbols-dir=path"

print" the path to a symbols dir, such as=/tmp/out/target/product/dream/symbols"

print

print" --symbols-zip=path"

print" the path to a symbols zip file, such as=dream-symbols-12345.zip"

print

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

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."

print

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

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

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

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

这里R8625SSNSKQLYA10145451ics4.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


你可能感兴趣的:(如何阅读Android crash log以及stack trace)