bytedance / btrace

🔥🔥 btrace(AKA RheaTrace) is a high performance Android trace tool which is based on Perfetto, it support to define custom events automatically during building apk and using bhook to provider more native events like Render/Binder/IO etc.
Other
1.89k stars 268 forks source link

Unexpected end of file from server #72

Open jll0628 opened 1 year ago

jll0628 commented 1 year ago

Exception in thread "main" java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.URL.openStream(Unknown Source) at org.apache.commons.io.IOUtils.toString(IOUtils.java:2953) at com.bytedance.rheatrace.processor.Adb$Http.get(Adb.java:164) at com.bytedance.rheatrace.processor.core.Mapping.selectMapping(Mapping.java:47) at com.bytedance.rheatrace.processor.core.Mapping.loadMapping(Mapping.java:79) at com.bytedance.rheatrace.processor.core.Mapping.get(Mapping.java:36) at com.bytedance.rheatrace.processor.core.AppTraceProcessor.processBinary(AppTraceProcessor.java:145) at com.bytedance.rheatrace.processor.core.AppTraceProcessor.getBinaryTrace(AppTraceProcessor.java:50) at com.bytedance.rheatrace.processor.lite.LiteCapture.process(LiteCapture.java:73) at com.bytedance.rheatrace.processor.Main.main(Main.java:108) 07-03 17:05:09.508 D RheaTrace : Run adb shell setprop debug.rhea.startWhenAppLaunch 0 07-03 17:05:09.795 D RheaTrace : Run adb shell setprop debug.rhea.mainThreadOnly 0 07-03 17:05:10.125 D RheaTrace : Run adb shell setprop debug.rhea.methodDurThreshold 0 07-03 17:05:10.437 D RheaTrace : Run adb shell setprop debug.rhea.category.all 0

1.windows; 1.8.0_351; Python3; java -jar rhea-trace-processor-2.0.0.jar -a ${your app package name} -t 10 -o output.pb -r rhea.all sched -fullClassName -mode simple -debug

  1. MTKG85 Android13
  2. APK64位,不包含methodMapping.txt ;dex 中没有包含 Trace.i、Trace.o 的插桩代码
mzule commented 1 year ago

apk 如果不包含 methodMapping.txt 以及没有 TraceStub.i 和 TraceStub.o,那就是 btrace 没有集成成功,你可以检查下集成的逻辑是否正确。

mzule commented 1 year ago

整个执行的日志也可以提供的更全一点

jll0628 commented 1 year ago

Hello 大佬, 1.集成是按照readme和demo参考集成的 2.修改needPackageWithMethodMap为true后,methodMapping.txt 这个文件没有被打包进assets下面,在编译输出的outputs/rhea 3.apk odex里面有一个TraceStub

07-03 19:36:18.856 D RheaTrace : Run adb devices 07-03 19:36:18.864 D RheaTrace : Got adb path: F:\SDK\platform-tools\adb.exe 07-03 19:36:19.196 I RheaTrace : workspace clear: C:\Users\lingling.jiang\Desktop\ATS\bTrace\rheatrace.workspace 07-03 19:36:19.197 D RheaTrace : Run adb shell setprop persist.traced.enable 1 07-03 19:36:19.631 D RheaTrace : check port free: 8031 07-03 19:36:19.632 D RheaTrace : Run adb shell netstat -tunlp 07-03 19:36:20.014 D RheaTrace : port 8031 is free 07-03 19:36:20.014 D RheaTrace : Run adb shell setprop debug.rhea.httpServerPort 8031 07-03 19:36:20.346 D RheaTrace : Run adb shell setprop debug.rhea.startWhenAppLaunch 1 07-03 19:36:20.673 D RheaTrace : Run adb shell setprop debug.rhea.mainThreadOnly 0 07-03 19:36:21.002 D RheaTrace : Run adb shell setprop debug.rhea.methodIdMaxSize 500000000 07-03 19:36:21.318 D RheaTrace : Run adb shell setprop debug.rhea.category.all 1 07-03 19:36:21.664 D RheaTrace : system level capture: LiteCapture 07-03 19:36:21.668 RheaTrace : start tracing... 07-03 19:36:21.669 D RheaTrace : Run adb shell am force-stop com.camera.debug 07-03 19:36:22.011 D RheaTrace : Run adb shell dumpsys package com.camera.debug 07-03 19:36:22.377 D RheaTrace : Run adb shell am start -n com.camera.debug/com.android.camera.CameraLauncher -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 07-03 19:36:22.772 D RheaTrace : Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.camera.debug/com.android.camera.CameraLauncher } 07-03 19:36:32.779 RheaTrace : stop tracing... 07-03 19:36:32.779 D RheaTrace : Run adb shell am broadcast -a com.bytedance.rheatrace.switch.stop com.camera.debug 07-03 19:36:33.146 D RheaTrace : Broadcasting: Intent { act=com.bytedance.rheatrace.switch.stop flg=0x400000 pkg=com.camera.debug } 07-03 19:36:33.146 D RheaTrace : Broadcast completed: result=0 07-03 19:36:33.148 D RheaTrace : Run adb forward tcp:8031 tcp:8031 07-03 19:36:33.518 D RheaTrace : 8031 07-03 19:36:33.604 RheaTrace : MaxAppTraceBufferSize usage 4505296/500000000 (0%) Exception in thread "main" java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.URL.openStream(Unknown Source) at org.apache.commons.io.IOUtils.toString(IOUtils.java:2953) at com.bytedance.rheatrace.processor.Adb$Http.get(Adb.java:164) at com.bytedance.rheatrace.processor.core.Mapping.selectMapping(Mapping.java:47) at com.bytedance.rheatrace.processor.core.Mapping.loadMapping(Mapping.java:79) at com.bytedance.rheatrace.processor.core.Mapping.get(Mapping.java:36) at com.bytedance.rheatrace.processor.core.AppTraceProcessor.processBinary(AppTraceProcessor.java:145) at com.bytedance.rheatrace.processor.core.AppTraceProcessor.getBinaryTrace(AppTraceProcessor.java:50) at com.bytedance.rheatrace.processor.lite.LiteCapture.process(LiteCapture.java:73) at com.bytedance.rheatrace.processor.Main.main(Main.java:108) 07-03 19:36:34.149 D RheaTrace : Run adb shell setprop debug.rhea.startWhenAppLaunch 0 07-03 19:36:34.478 D RheaTrace : Run adb shell setprop debug.rhea.mainThreadOnly 0 07-03 19:36:34.814 D RheaTrace : Run adb shell setprop debug.rhea.methodDurThreshold 0 07-03 19:36:35.146 D RheaTrace : Run adb shell setprop debug.rhea.category.all 0

mzule commented 1 year ago

如果 apk assets 目录没有 methodMapping.txt 文件,还需要通过 -m 指定打包输出的 methodMapping.txt 路径

jll0628 commented 1 year ago

加上-m methodMapping.txt 和-mode simple可以抓取trace了。 请问一下可以支持mk集成吗?

jll0628 commented 1 year ago

Hi 大佬, 加上-mode simple抓出来的trace是没有线程状态信息的,请问这如何解决了

mzule commented 1 year ago

@jll0628 不加 -mode simple 会遇到采集失败的问题吗?

jll0628 commented 1 year ago

会的 07-13 09:30:22.359 I RheaTrace : workspace clear: E:\Performance\Tool\BTrace\rheatrace.workspace 07-13 09:30:24.872 I RheaTrace : os version is 33. default capture is PerfettoCapture 07-13 09:30:26.881 RheaTrace : start tracing... 07-13 09:30:37.871 RheaTrace : stop tracing... 07-13 09:30:38.563 RheaTrace : MaxAppTraceBufferSize usage 4692672/500000000 (0%) 07-13 09:30:38.878 E RheaTrace : Error: systrace file not found: rheatrace.workspace\systemTrace.trace 07-13 09:30:38.878 E RheaTrace : Tips: your device may not support perfetto. please retry with -mode simple.

mzule commented 1 year ago

是华为手机吗?不行只能换个手机试试了,看起来是抓不到 Perfetto 的 trace

jll0628 commented 1 year ago

不是华为的手机,开发者模式里面是可以抓取Pefetto的trace的

mzule commented 1 year ago

这个暂时没有好的办法,具体表现就是通过Perfetto命令没有采集到数据,导致只能使用simple模式。建议先换个手机试试吧。

YellowQC commented 10 months ago

这个mapping.txt指的是什么?debug包不混淆没有mapping文件呀?也会报这个错误,不知道如何解决。