执行dmtracedump命令报版本起始错误,Android Monitor生成trace文件却正常?
dmtracedump报错ERROR: not at start of version (found 'SLOW')的原因分析 我来帮你拆解这个问题,这个报错本质是你用来解析的trace文件格式和dmtracedump的预期格式完全不匹配,具体原因主要有这几点:
文件类型不对:
dmtracedump是专门用来解析Dalvik虚拟机的方法调用trace文件的,这类文件的开头会有特定的版本标识(比如VERSION 10)。而你的trace文件开头是SLOW,这说明你捕获的是CPU性能采样型trace(属于systrace体系的采样文件),这类文件是给systrace工具解析用的,和dmtracedump需要的格式完全不兼容,所以必然报错。而Android Monitor生成的是标准的Dalvik方法调用trace,自然能被正常解析。捕获trace的方式错误:你大概率用错了trace捕获的命令或工具选项。比如如果是用
am profile start命令,要是加了--sampling参数,生成的就是CPU采样trace,而非dmtracedump需要的全量方法调用trace。正确生成Dalvik方法调用trace的方式应该是不带采样参数的am profile start,或者在Android Studio Profiler里选择「Method Trace」而非「CPU Sample」选项。小概率:文件开头损坏:虽然可能性很低,但如果你的trace文件在生成、保存或传输过程中,开头部分被截断、篡改,导致
dmtracedump找不到预期的版本标识,也会触发这个报错。不过你两次不同路径的文件都报同样的错,这个情况的概率可以忽略。
你可以用文本编辑器分别打开报错的trace文件和Android Monitor生成的trace文件,对比开头内容——前者是SLOW开头,后者是VERSION开头,就能直观确认格式差异了。
内容的提问来源于stack exchange,提问作者zjw

