YueChen-C / py-ios-device

IOS Professional Performance Testing Tool . You can get CPU, GPU, Memory , Lifecycle and other metrics from real iOS devices . IOS 专业性能测试工具
GNU General Public License v3.0
634 stars 179 forks source link

机器上发生了无法解析的错误,导致无法检测fps相关,请见日志 #61

Closed icesword0760 closed 2 years ago

icesword0760 commented 2 years ago

我修改了源码用于打印出需要解析的字节,检测fps相关时,程序会无法正常工作,报错类型为 无法解析 修改的方法:
def check_header(self,kd_buf): print(kd_buf) if kd_buf.startswith(b'\x07X\xa2Y'): return io.BytesIO() buf_io = io.BytesIO(kd_buf) if not self.threads_pids: self.version = buf_io.read(4) print(buf_io.read()) parsed_header = kd_header_v2.parse_stream(buf_io) self.set_threads_pids(parsed_header.threadmap) return buf_io

报错日志: 2022-03-04 15:35:06 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008030-00150C6E1A51402E 2022-03-04 15:35:06 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2022-03-04 15:35:06 [INFO] [LockDown] lockdown.py[line:384] save path :C:\Users\Administrator.cache\pymobiledevice\00008030-00150C6E1A51402E.pem 2022-03-04 15:35:06 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ... b'bplist00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3,-\NSDictionaryXNSObject\xd2()/0\x10\x12DTKTraceTapMessage\xa312-\x10\x12DTKTraceTapMessage\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' b'st00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0_\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10_\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()*+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3*,-\\NSDictionaryXNSObject\xd2()/0_\x10\x12DTKTraceTapMessage\xa312-_\x10\x12DTKTraceTapMessage\\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' 2022-03-04 15:35:06 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> number_of_treads stream read less than specified amount, expected 4, found 0 Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver self._channel_callbacks(2 ** 32 - dtx.channel_code) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 499, in _callback for args in Kperf.to_dict(res.selector.data): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 971, in to_dict buf_io = self.check_header(kd_buf) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 966, in check_header parsed_header = kd_header_v2.parse_stream(buf_io) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 300, in parse_stream return self._parsereport(stream, context, "(parsing)") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1019, in _parse data = stream_read(stream, self.length, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 92, in stream_read raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path) construct.core.StreamError: Error in path (parsing) -> number_of_treads stream read less than specified amount, expected 4, found 0 Traceback (most recent call last): File "D:/PycharmProjects/toolbox/test.py", line 20, in PyiOSDevice().start_get_fps(fps_callback) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 146, in start_get_fps return start_get_fps(device_id=self.device_id, rpc_channel=self.rpc_channel, callback=callback) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 548, in start_get_fps _rpc_channel.call("com.apple.instruments.server.services.coreprofilesessiontap", "start") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 183, in call ret = self._call(True, channel_id, selector, *auxiliaries) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 222, in _call ret = self.wait_reply(identifier) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 196, in wait_reply ret = self._reply_queues[message_id].get(timeout=timeout) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\queue.py", line 178, in get raise Empty _queue.Empty

icesword0760 commented 2 years ago

现在这个库fps相关功能完全无法使用,希望可以尽快解决,非常感谢

YueChen-C commented 2 years ago

如果仅仅是解析 fps 建议 用 kperf_data 来解析 而不是 Kperf.to_dict这里应该早就做了兼容处理,最新的代码应该不会有这个问题。 还有如果可以的话在这里帮我保存个 res.selector.data 一些数据给我吗 for args in Kperf.to_dict(res.selector.data):

icesword0760 commented 2 years ago

可以的 你的这行代码我要插在哪里(文件路径,代码行数)?需要在最新的版本上插入吗还是我当前这个版本

YueChen-C commented 2 years ago
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 499, in _callback 
for args in Kperf.to_dict(res.selector.data):

这是你的文件路径 最近版本这个问题应该解决了,但我想你帮我在一个文件里保存一下这里的二进制数据包,因为这涉及 Kperf.to_dict 解析,我想看看哪里报错了

icesword0760 commented 2 years ago
def _callback(res):
    nonlocal frame_count, last_frame, last_1_frame_cost, last_2_frame_cost, last_3_frame_cost, time_count, mach_time_factor, \
        jank_count, big_jank_count, jank_time_count, _list, count_time
    if type(res.selector) is InstrumentRPCParseError:
        print("get InstrumentRPCParseError, data is :")
        print(res.selector.data)
        for args in Kperf.to_dict(res.selector.data):
            _time, code = args.timestamp, args.debug_id
            if code == 830472984:
                if not last_frame:
                    last_frame = long(_time)
                else:
            。。。。。。。。。。。。。。。。。。。。。

C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe D:/PycharmProjects/toolbox/test.py 111 2022-03-04 17:03:56 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008030-00150C6E1A51402E 2022-03-04 17:03:56 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2022-03-04 17:03:56 [INFO] [LockDown] lockdown.py[line:384] save path :C:\Users\Administrator.cache\pymobiledevice\00008030-00150C6E1A51402E.pem 2022-03-04 17:03:56 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ... get InstrumentRPCParseError, data is : b'bplist00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3,-\NSDictionaryXNSObject\xd2()/0\x10\x12DTKTraceTapMessage\xa312-\x10\x12DTKTraceTapMessage\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01`' 2022-03-04 17:03:56 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> threadmap -> process stream read less than specified amount, expected 1, found 0 Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver self._channel_callbacks(2 ** 32 - dtx.channel_code) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 501, in _callback for args in Kperf.to_dict(res.selector.data): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 971, in to_dict buf_io = self.check_header(kd_buf) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 966, in check_header parsed_header = kd_header_v2.parse_stream(buf_io) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 300, in parse_stream return self._parsereport(stream, context, "(parsing)") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2221, in _parse e = self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4496, in _parse return self.subcon._parsereport(io.BytesIO(data), context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 697, in _parse obj = self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4567, in _parse b = stream_read(stream, unit, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 92, in stream_read raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path) construct.core.StreamError: Error in path (parsing) -> threadmap -> process stream read less than specified amount, expected 1, found 0

icesword0760 commented 2 years ago

你好 我更新到 Name: py-ios-device Version: 2.2.3.1 还是一样的报错

2022-03-04 17:12:14 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008030-00150C6E1A51402E 2022-03-04 17:12:14 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2022-03-04 17:12:14 [INFO] [LockDown] lockdown.py[line:377] save path :C:\Users\Administrator.cache\pymobiledevice\00008030-00150C6E1A51402E.pem 2022-03-04 17:12:14 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ... get InstrumentRPCParseError, data is : b'bplist00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3,-\NSDictionaryXNSObject\xd2()/0\x10\x12DTKTraceTapMessage\xa312-\x10\x12DTKTraceTapMessage\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01`' 2022-03-04 17:12:14 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> threadmap -> process stream read less than specified amount, expected 1, found 0 Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver self._channel_callbacks(2 ** 32 - dtx.channel_code) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 501, in _callback for args in Kperf.to_dict(res.selector.data): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 969, in to_dict buf_io = self.check_header(kd_buf) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 964, in check_header parsed_header = kd_header_v2.parse_stream(buf_io) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 300, in parse_stream return self._parsereport(stream, context, "(parsing)") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2221, in _parse e = self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4496, in _parse return self.subcon._parsereport(io.BytesIO(data), context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 697, in _parse obj = self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4567, in _parse b = stream_read(stream, unit, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 92, in stream_read raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path) construct.core.StreamError: Error in path (parsing) -> threadmap -> process stream read less than specified amount, expected 1, found 0 Traceback (most recent call last): File "D:/PycharmProjects/toolbox/test.py", line 20, in PyiOSDevice().start_get_fps(fps_callback) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 146, in start_get_fps return start_get_fps(device_id=self.device_id, rpc_channel=self.rpc_channel, callback=callback) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 550, in start_get_fps _rpc_channel.call("com.apple.instruments.server.services.coreprofilesessiontap", "start") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 183, in call ret = self._call(True, channel_id, selector, *auxiliaries) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 222, in _call ret = self.wait_reply(identifier) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 196, in wait_reply ret = self._reply_queues[message_id].get(timeout=timeout) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\queue.py", line 178, in get raise Empty _queue.Empty

YueChen-C commented 2 years ago

你这没更新成功吧 Kperf.to_dict 应该 变成了 kperf_data 方法,你加 qq 群然后加我交流吧