前段时间,我为我们的一个内部程序构建了一个记录和分类应用程序崩溃的系统.当时,我使用频率和聚合丢失时间(程序启动和崩溃之间的时间)的组合来确定崩溃类型的优先级.它运作得相当好.
现在,那些想要在每种类型的碰撞成本上获得可靠数据的力量.或者至少,数字看起来很稳固.我想我可以使用总损失时间乘以一些似乎合理的数字,但它看起来很狡猾.
是否有任何已建立的方法来计算应用程序崩溃的实际成本?或者没有,发表的研究推测这些成本?
准确性是不可能的,但如果一致地应用并且其限制明确记录,则基于正常运行时间的估计应该足够.谢谢,马特,猎户座,花时间回答这个问题.
我只知道崩溃不会耗尽内存.
我怎么知道它导致错误的原因?
Incident Identifier: 242C320A-763C-407E-BD40-443E3E9B611C
CrashReporter Key: 307097bc0924dac79e5352eb10692943c0ef05ad
Process: AsianDelight [4894]
Path: /var/mobile/Applications/7A8FF881-A033-45B9-8F72-8478217821E9/AsianDelight.app/AsianDelight
Identifier: AsianDelight
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2010-01-20 16:32:49.285 +0700
OS Version: iPhone OS 3.1.2 (7D11)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x00007532 realizeClass + 18
1 libobjc.A.dylib 0x00007578 realizeClass + 88
2 libobjc.A.dylib 0x00007578 realizeClass + 88
3 libobjc.A.dylib 0x00007e76 prepareForMethodLookup + 26
4 libobjc.A.dylib …Run Code Online (Sandbox Code Playgroud) 编辑:这个可重现的SIGSEGV发生在具有多个proc和超过2GB内存的Linux机器上,因此Java默认为-server模式.有趣的是,如果我强迫"-client"再也没有崩溃......(我仍然不太清楚如何处理我可重复的SIGSEGV,但它仍然很有趣).
首先请注意,这有点相关但与以下内容不同,因为在我们的情况下,它只发生了一个SIGSEGV,我们可以可靠地触发它:
JVM OutOfMemory错误"死亡螺旋"(不是内存泄漏)
它是相关的,因为它发生在我们的应用程序提供"大量数据"时:数据来自文本文件然后数字嘎吱嘎吱(是的,Java中的财务数字运算).
我只能使用有效的Java代码可靠地触发JVM到SIGSEGV.
注意:我总是会崩溃JVM 1.6.0_17和JVM 1.6.0_18这个问题并不是关于如何解决这个问题(例如,使用VM参数可以解决问题,但我不是在那之后,我想知道如何处理这种始终可重复的SIGSEGV).
我有一个解决方法,只是在启动我们的应用程序时使用Java 1.5(同时仍然使用Java 1.6在同一台机器上运行IntelliJ IDEA等),但我的问题是,是否应报告此情况,如果它应该,如何报告它知道日志本身包含专有信息(完整的hs_err _..._日志).
可以排除硬件错误:
这种情况发生在一个经常达到几个月正常运行时间的工作站上(我只在重要的安全补丁影响我已经发布的严格和强化的Debian Linux时重新启动它,这实际上并不经常发生)以及哪些应用程序永远不会崩溃(使它非常不太可能是那台机器上的硬件问题[更多下面])
相同的应用程序在相同负载下的JVM 1.5下在同一台机器上完美运行(这就是我测试应用程序的方式:我只需在1.5 VM下启动它)
相同的应用程序在相同(巨大)负载下的超过一百台客户端机器上运行完美(在Windows + JVM 1.5或1.6上从未崩溃一次,并且从未在OS X + JVM 1.5或1.6上崩溃一次[崩溃意味着即时电话来自客户的电话])
同一台机器上的其他应用程序和相同的1.6.0_17或1.6.0_18 JVM永远不会崩溃(例如我有两个IntelliJ IDEA实例作为同一台机器上的两个不同用户运行而且它们不会崩溃)
机器用memtest"定期"测试(在安装新操作系统之前,最后一次发生在安装Debian Lenny时,不久前)
这是可重复的按需SIGSEGV:
... $uname -a
Linux saturn 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686 GNU/Linux
... $ export /home/wizard/jdk1.6.0_17/bin:$PATH
... $ java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Server VM (build 14.3-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)
启动应用程序,输入"大量数据",等待几秒钟...... …
使用的黄金法则NSNotification似乎是
"
removeObserver在observer(或object)之前的呼叫被解除分配".
我正在处理一个没有遵循此规则的代码库,但我无法找到违规行为.我搜索了代码并确保每个addObserver都有匹配removeObserver但我仍然看到以下变化的崩溃报告:
OS Version: iPhone OS 5.0.1 (9A405)
Report Version: 104
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x8
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x31516fbc objc_msgSend + 16
1 Foundation 0x3195b50f __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 19
2 CoreFoundation 0x37a02577 ___CFXNotificationPost_block_invoke_0 + 71
3 CoreFoundation 0x3798e0cf _CFXNotificationPost + 1407
4 Foundation 0x318cf3fb -[NSNotificationCenter postNotificationName:object:userInfo:] + 67
5 UIKit 0x34e5ee25 -[UIApplication _handleApplicationSuspend:eventInfo:] + 697
6 UIKit 0x34deed17 …Run Code Online (Sandbox Code Playgroud) cocoa-touch objective-c crash-reports nsnotification nsnotificationcenter
我该如何解释这些日志以确定appcrash的原因?
Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: InsightAnalysisEngine.exe
P2: 1.0.0.0
P3: 4f4dee84
P4: KERNELBASE.dll
P5: 6.1.7600.16850
P6: 4e211485
P7: c03d0000
P8: 0000b9bc
P9:
P10:
Attached files:
C:\Users\devservice\AppData\Local\Temp\WER44D1.tmp.appcompat.txt
C:\Users\devservice\AppData\Local\Temp\WER461A.tmp.WERInternalMetadata.xml
C:\Users\devservice\AppData\Local\Temp\WER462A.tmp.hdmp
C:\Users\devservice\AppData\Local\Temp\WER48E9.tmp.mdmp
These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_InsightAnalysisE_857bf71fb86d6845394e6281199ee78ad305d_cab_1cc34a1e
Analysis symbol:
Rechecking for solution: 0
Report Id: 8a13d73c-62b8-11e1-ab53-0050ba3279b5
Report Status: 4
Run Code Online (Sandbox Code Playgroud)
你是另一个同样神秘的人:
Faulting application name: Engine.exe, version: 1.0.0.0, time stamp: 0x4f4dee84
Faulting module name: KERNELBASE.dll, version: 6.1.7600.16850, time stamp: 0x4e211485
Exception …Run Code Online (Sandbox Code Playgroud) 我遇到了一个非常不寻常的问题..我在UIKit上遇到了崩溃..我第一次面对这样的事情..请任何人指导我的...
这是我得到的崩溃日志.
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x1161a18c
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x386fcb66 objc_msgSend + 5
1 UIKit 0x30b5dda3 -[UIApplication sendAction:to:from:forEvent:] + 90
2 UIKit 0x30cc5615 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 120
3 UIKit 0x30b5dda3 -[UIApplication sendAction:to:from:forEvent:] + 90
4 UIKit 0x30b5dd3f -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 38
5 UIKit 0x30b5dd13 -[UIControl sendAction:to:forEvent:] + 46
6 UIKit 0x30b49743 -[UIControl _sendActionsForEvents:withEvent:] + 374
7 UIKit 0x30b5d75b -[UIControl touchesEnded:withEvent:] + 594
8 UIKit 0x30b5d425 -[UIWindow _sendTouchesForEvent:] + 528
9 UIKit 0x30b58451 -[UIWindow sendEvent:] + …Run Code Online (Sandbox Code Playgroud) 有人可以确认我的想法是由于SKProductsRequestDelegate仍然被分配而生成以下崩溃报告,但代码本身不是吗?即VC已关闭?
StoreKit: __34-[SKProductsRequest _handleReply:]_block_invoke + 442
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x41682340
Triggered by Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x38d19626 objc_msgSend + 6
1 StoreKit 0x30c4784a __34-[SKProductsRequest _handleReply:]_block_invoke + 442
2 libdispatch.dylib 0x391f7830 _dispatch_call_block_and_release + 8
3 libdispatch.dylib 0x391f781c _dispatch_client_callout + 20
4 libdispatch.dylib 0x391fe49a _dispatch_main_queue_callback_4CF$VARIANT$mp + 274
5 CoreFoundation 0x2e45f89c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4
6 CoreFoundation 0x2e45e170 __CFRunLoopRun + 1296
7 CoreFoundation 0x2e3c8eba CFRunLoopRunSpecific + 518
8 CoreFoundation 0x2e3c8c9e CFRunLoopRunInMode + 102
9 …Run Code Online (Sandbox Code Playgroud) 任何人都可以帮助揭开崩溃报告的神秘面纱吗?
没有异常名称或原因,并且回溯显示在包含init崩溃方法的文件的第0行发生崩溃. 什么?
Incident Identifier: TODO
CrashReporter Key: TODO
Hardware Model: iPhone7,2
Process: AppName [1112]
Path: /private/var/mobile/Containers/Bundle/Application/2632C5D7-6A07-4002-A27B-D547E9A7345C/AppName.app/AppName
Identifier: com.app.name
Version: 67
Code Type: ARM-64
Parent Process: launchd [1]
Date/Time: 2015-06-26 18:20:18 +0000
OS Version: iPhone OS 8.3 (12F70)
Report Version: 104
Exception Type: SIGTRAP
Exception Codes: TRAP_BRKPT at 0x10008c370
Crashed Thread: 0
Application Specific Information:
*** Terminating app due to uncaught exception '', reason: ''
Run Code Online (Sandbox Code Playgroud)
第一对象征着崩溃线程的行:
0 AppName 0x000000010008c370 init (article, $metatype) (ArticleImageProvider.swift:0)
1 AppName 0x000000010006b0c4 shareArticleActivityViewController (article, …Run Code Online (Sandbox Code Playgroud) 我试图根据用户提交的崩溃报告来追踪错误的来源,并得出结论我需要一些关于如何解释崩溃报告的基本培训.
例如,崩溃报告如下:
java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at java.lang.Integer.valueOf(Integer.java:525)
at com.cloud3squared.meteogram.MeteogramService.cacheFileName(MeteogramService.java)
cacheBaseName(MeteogramService.java)
getAppWidgetId(MeteogramService.java)
createAdhocWidgetUpdateIntent(MeteogramService.java)
setupBasicClickStuff(MeteogramService.java)
setAdhocAppWidgetAlarm(MeteogramService.java)
setNextClockWidgetUpdateAlarm(MeteogramService.java)
cancelAppWidgetAlarm(MeteogramService.java)
cancelAppWidgetAlarms(MeteogramService.java)
logAction$3aaf2084(MeteogramService.java)
logActionAgainstAllWidgets$62dc3a79(MeteogramService.java)
updateAppWidget(MeteogramService.java)
showButtons(MeteogramService.java)
hideButtons(MeteogramService.java)
fetchOk(MeteogramService.java)
getViewId(MeteogramService.java)
putBitmapIntoWidget(MeteogramService.java)
lngNow(MeteogramService.java)
showNotification(MeteogramService.java)
showMessageInWidget(MeteogramService.java)
sharpen(MeteogramService.java)
removeFromRequestsList(MeteogramService.java)
removeFromRequestsList$204347ff(MeteogramService.java)
MeteogramService.java)
displayStuffInWidget(MeteogramService.java)
access$000(MeteogramService.java)
access$100(MeteogramService.java)
access$300(MeteogramService.java)
at com.cloud3squared.meteogram.MeteogramService$GetServerWidgetAsyncTask.onPostExecute(MeteogramService.java)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.access$500(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Run Code Online (Sandbox Code Playgroud)
这是否显示了导致呼叫的顺序NumberFormatException,如果是,则按什么顺序显示?我是否从头到尾阅读这些at内容?什么是access嵌套在里面MeteogramService?... access该类中没有方法.如何确定NumberFormatException实际发生的函数内部?从逻辑上讲,我会说里面cacheFileName却没有什么有可能导致这种异常...的解析String到 …
我在 Play Store 上发布了一个 Flutter 应用程序,该应用程序时不时地报告崩溃。为了构建它以供发布,我使用了如下命令进行混淆:
flutter build apk --obfuscate --split-debug-info=build/app/outputs/symbols
Run Code Online (Sandbox Code Playgroud)
现在,在 Play Console 中,我从发生的崩溃中获取堆栈跟踪,例如:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> com.package.name <<<
backtrace:
#00 pc 00000000000744b0 /apex/com.android.runtime/lib64/bionic/libc.so (abort+160)
#00 pc 00000000002bc350 /data/app/com.package.name-CelqfOPR1qgCAOmLM1XLVg==/split_config.arm64_v8a.apk!lib/arm64-v8a/libflutter.so (offset 0x5cc000)
#00 pc 00000000002b29c0 /data/app/com.package.name-CelqfOPR1qgCAOmLM1XLVg==/split_config.arm64_v8a.apk!lib/arm64-v8a/libflutter.so (offset 0x5cc000)
#00 pc 0000000000000001 <unknown>
Run Code Online (Sandbox Code Playgroud)
其中“package.name”是我的应用程序的包名称。
如何反混淆/符号化该堆栈跟踪?
我已经尝试按照建议使用 flutter symbolize 命令来实现适当的架构:
flutter symbolize -i err.txt -d app.android-arm64.symbols
Run Code Online (Sandbox Code Playgroud)
但它只是再次打印 err.txt 文件(堆栈跟踪)。
在Android上调试Flutter崩溃报告的整个过程中我是否遗漏了一些东西?
crash-reports ×10
ios ×4
crash ×3
android ×2
objective-c ×2
cocoa-touch ×1
debugging ×1
event-log ×1
event-viewer ×1
flutter ×1
iphone ×1
java ×1
jvm ×1
logging ×1
skproduct ×1
statistics ×1
swift ×1