如何閱讀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:'

  1. generic/generic/generic:4.0.4/IMM76D/eng.kuangjp.20120504.181216:eng/debug,test-keys'  
  1. 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

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

這里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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM