看到以下崩溃日志经常弹出:
java.lang.InternalError:
at java.lang.Thread.nativeCreate (Native Method)
at java.lang.Thread.start (Thread.java:733)
at android.media.MediaPlayer.setSubtitleAnchor (MediaPlayer.java:3039)
at android.media.MediaPlayer.scanInternalSubtitleTracks (MediaPlayer.java:3240)
at android.media.MediaPlayer.prepare (MediaPlayer.java:1442)
at android.media.MediaPlayer.create (MediaPlayer.java:1046)
at android.media.MediaPlayer.create (MediaPlayer.java:1012)
...
Run Code Online (Sandbox Code Playgroud)
我MediaPlayer.create用context/resource参数调用.它对我和95%的用户都很好.有一点需要注意的是,我确实得到了可怕的
E/MediaPlayer: Should have subtitle controller already set
Run Code Online (Sandbox Code Playgroud)
日志消息是许多StackOverflow问题的主题.我目前一直忽视它,就像大多数答案告诉我的那样 - 但如果scanInternalSubtitleTracks是在创建InternalError崩溃,也许我不应该?
从Android 2.2开始,似乎有一个发送崩溃报告的新功能,如链接中所述:
我该如何使用此功能?对于从市场下载的每个应用程序(也称为Google Play商店),它是自动的吗?我在哪里可以找到有关此功能的更多信息?
此外,是否可以通过使用DefaultExceptionHandler自定义发送的内容,并将我们自己的崩溃描述?
注意:我知道有很多工具可用于发送崩溃报告(如ACRA),但我希望先检查是否可以使用已经提供的内容.
编辑:我已经成功修改了进一步传递的异常,希望这也会改变发送到Google开发者网站的报告.
以下是与此相关的示例代码:
private static class DefaultExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler
...
@Override
public void uncaughtException(Thread t, Throwable e)
{
final StackTraceElement[] exceptionStackTrace = e.getStackTrace();
Exception exception = new Exception("my new exception!", e);
final StackTraceElement[] newExceptionStackTrace = new StackTraceElement[exceptionStackTrace.length + 1];
System.arraycopy(exceptionStackTrace, 0, newExceptionStackTrace, 1, exceptionStackTrace.length);
newExceptionStackTrace[0] = new StackTraceElement("TEST CLASS", "TEST METHOD", "TEST FILE", 0);
exception.setStackTrace(newExceptionStackTrace);
_defaultUEH.uncaughtException(t, exception); //this will hopefully call the default handling of the exception …Run Code Online (Sandbox Code Playgroud) 我经常遇到这个崩溃请你帮我解决一下
Incident Identifier: BC2870F3-4119-462B-9B2E-2236E403E7C2
CrashReporter Key: 7d9cc50413d82f64739259a761dbb92e755b623d
Hardware Model: iPhone3,1
Process: project name [16361]
Path: /var/mobile/Applications/7190A4F4-3A65-4663-9BEC-389AAFFE9851/project name.app/project name
Identifier: project name
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2012-06-29 18:23:33.732 -0700
OS Version: iPhone OS 5.1 (9B176)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x3002bd4f
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x362fdf78 0x362fa000 + 16248
1 CoreFoundation 0x34e3ed2e 0x34e23000 + 113966
2 CFNetwork …Run Code Online (Sandbox Code Playgroud) 我的Android应用程序最近在Google Play控制台中收到了很多ANR报告.由于我在应用中包含Google Analytics时就开始发生这种情况,因此我强烈怀疑Google Analytics会导致这种情况发生.
问题是我知道如何使用堆栈跟踪来调试崩溃.但我不确定如何调试ANR.我猜ANR意味着主线程在某处被阻塞.但是如何知道它被阻止的位置?见下面我最近得到的典型ANR之一.如何解读它并开始弄清楚应用程序挂起的位置?
PS:由于使用了DexGuard代码混淆器,堆栈中的某些类/方法看起来很奇怪.
ANR报告:
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 VMWAIT
| group="main" sCount=1 dsCount=0 obj=0x40022198 self=0xcec8
| sysTid=5001 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=-1345006496
| schedstat=( 1265991222 1037628169 649 )
at dalvik.system.DexFile.openDexFile(Native Method)
at dalvik.system.DexFile.<init>(DexFile.java:103)
at dalvik.system.DexFile.loadDex(DexFile.java:142)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at o.?$?$?.<clinit>((null):-1)
at o.?$?.onServiceConnected(:-1)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1064)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1081)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
"Binder Thread …Run Code Online (Sandbox Code Playgroud) 前段时间,我为我们的一个内部程序构建了一个记录和分类应用程序崩溃的系统.当时,我使用频率和聚合丢失时间(程序启动和崩溃之间的时间)的组合来确定崩溃类型的优先级.它运作得相当好.
现在,那些想要在每种类型的碰撞成本上获得可靠数据的力量.或者至少,数字看起来很稳固.我想我可以使用总损失时间乘以一些似乎合理的数字,但它看起来很狡猾.
是否有任何已建立的方法来计算应用程序崩溃的实际成本?或者没有,发表的研究推测这些成本?
准确性是不可能的,但如果一致地应用并且其限制明确记录,则基于正常运行时间的估计应该足够.谢谢,马特,猎户座,花时间回答这个问题.
我只知道崩溃不会耗尽内存.
我怎么知道它导致错误的原因?
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) 我今天已经更新到Xcode 4.5,我不能再生成我的应用程序的功能发布了.使用以前版本的Xcode生成一个版本没有任何问题.
我注意到它在调试(-O0)中直接在我的手机上运行时没有崩溃,但是当我生成一个版本(-Os)时,它会在启动后几秒内一直崩溃.
如果我将pjsua_app.c设置为-O0,同时将项目的其余部分保留为-Os的发布默认值,我也可以生成一个工作版本.
以下是使用"Fast [-O,O1]"设置的崩溃日志:
Incident Identifier: DB1C14AD-5C2A-4F2C-8B03-E483A7D31760
CrashReporter Key: 435140979595045aaa5a1c90fee1a20f6faf280a
Hardware Model: iPhone4,1
Process: myAppName [14144]
Path: /var/mobile/Applications/CD2A07F5-3E72-444D-9BD9-910E4634C4EC/myAppName.app/myAppName
Identifier: myAppName
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2012-09-19 23:41:39.098 -0600
OS Version: iPhone OS 5.1.1 (9B206)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x361f532c __pthread_kill + 8
1 libsystem_c.dylib 0x32d41208 pthread_kill + 48
2 libsystem_c.dylib …Run Code Online (Sandbox Code Playgroud) 我正在努力学习如何更好地理解崩溃日志,到目前为止我做得还不错.我注意到Apple的技术说明TN2151中没有解释过一部分.这是回溯的每个部分末尾的+数值.
这是一个例子:
6 UIKit 0x38bf3e7c -[UIViewController window:willAnimate:duration:] **+ 704**
Run Code Online (Sandbox Code Playgroud)
粗体部分是什么意思?
非常感谢
我的应用程序被Apple拒绝,我收到了.txt格式的崩溃报告,而不是.crash格式.
我如何表示或阅读崩溃报告?
我相信 crashpad_handler 创建并上传崩溃报告,并且有多种软件可以使用它。就我而言,它来自 VS 代码,位置:
/Applications/Visual Studio Code.app/Contents/Frameworks/Electron Framework.framework/Resources/ crashpad_handler
我从未见过如此高的 CPU 消耗,我的 Macbook Air 变得非常嘈杂。
我很想删除“crashpad_handler”unix 可执行文件,但是,我担心将来如果我的程序崩溃,我可能无法从技术支持获得帮助,因为我的崩溃报告都不会被上传。
这似乎是一个很常见的问题,但是,我在这里没有看到任何与此相关的帖子。
请建议我如何一劳永逸地解决这个问题(不仅仅是在活动监视器中强制退出它,因为我每次都必须这样做)。
谢谢。
crash-reports ×10
android ×3
iphone ×3
ios ×2
backtrace ×1
cpu ×1
crash ×1
debugging ×1
google-play ×1
java ×1
macos ×1
objective-c ×1
pjsip ×1
stack ×1
statistics ×1
symbolicate ×1
xcode ×1
xcode4.5 ×1