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
672 stars 183 forks source link

pyidevice instruments stackshot #25

Closed haryshi closed 3 years ago

haryshi commented 3 years ago

请问instruments stackshot 命令是能拿到运行的堆栈信息吗?执行之后貌似卡住了,没看到输出.log文件是怎么回事

2021-07-13 17:20:03 [INFO] [LockDown] lockdown.py[line:68] Connecting Device 7978366093cb268c5521e7f07aa511e8aaf5938e 2021-07-13 17:20:03 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2021-07-13 17:20:03 [INFO] [Instrument] dvt.py[line:148] set com.apple.instruments.server.services.coreprofilesessiontap callback ...

haryshi commented 3 years ago

ios 13.4.1是上面的日志,刚刚又试了一台ios 14.6的设备,报下面的错误:

2021-07-13 18:03:19 [INFO] [LockDown] lockdown.py[line:68] Connecting Device 00008020-001E19642190003A 2021-07-13 18:03:19 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2021-07-13 18:03:19 [INFO] [Instrument] dvt.py[line:148] set com.apple.instruments.server.services.coreprofilesessiontap callback ... 2021-07-13 18:03:20 [ERROR] [Instrument] dvt.py[line:233] 'utf-8' codec can't decode byte 0xe4 in position 0: unexpected end of data Traceback (most recent call last): File "/usr/local/lib/python3.8/site-packages/ios_device/servers/dvt.py", line 220, in _receiver self._channel_callbacks((1 << 32) - dtx.channel_code) File "/usr/local/lib/python3.8/site-packages/ios_device/cli/instruments.py", line 307, in on_callback_message kc_data = kc_data_parse(buf) File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 1706, in kc_data_parse str_data = "{" + kcdata_buffer.GetJsonRepr() + "}" File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 622, in GetJsonRepr o += ' "%s" : ' % k + v.GetJsonRepr() + "," File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 480, in GetJsonRepr return '[' + ', '.join([i.GetJsonRepr() for i in self.obj_collection]) + ']' File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 480, in return '[' + ', '.join([i.GetJsonRepr() for i in self.obj_collection]) + ']' File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 482, in GetJsonRepr return KNOWN_TYPES_COLLECTION[self.i_type].GetJsonRepr(self.i_data, self.i_flags) File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 364, in GetJsonRepr o = ", ".join(['"%s": %s' % (e.GetName(), e.GetJsonRepr(base_data)) for e in self.elements if File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 364, in o = ", ".join(['"%s": %s' % (e.GetName(), e.GetJsonRepr(base_data)) for e in self.elements if File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 301, in GetJsonRepr return self.GetStringRepr(base_data) File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 279, in GetStringRepr str_arr.append(self.GetValueAsString(base_data, i)) File "/usr/local/lib/python3.8/site-packages/ios_device/util/kc_data.py", line 246, in GetValueAsString return data.decode() UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 0: unexpected end of data Traceback (most recent call last): File "/usr/local/bin/pyidevice", line 8, in sys.exit(cli()) File "/usr/local/lib/python3.8/site-packages/ios_device/main.py", line 15, in cli cli_commands() File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1137, in call return self.main(args, kwargs) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1062, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1668, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1668, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, ctx.params) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 763, in invoke return __callback(args, *kwargs) File "/usr/local/lib/python3.8/site-packages/ios_device/cli/instruments.py", line 314, in stackshot rpc.core_profile_session(on_callback_message, stopSignal) File "/usr/local/lib/python3.8/site-packages/ios_device/cli/base.py", line 330, in core_profile_session self.instruments.call(InstrumentsService.CoreProfileSessionTap, "start") File "/usr/local/lib/python3.8/site-packages/ios_device/servers/dvt.py", line 169, in call ret = self._call(True, channel_id, selector, auxiliaries) File "/usr/local/lib/python3.8/site-packages/ios_device/servers/dvt.py", line 208, in _call ret = self.wait_reply(identifier) File "/usr/local/lib/python3.8/site-packages/ios_device/servers/dvt.py", line 182, in wait_reply ret = self._reply_queues[message_id].get(timeout=timeout) File "/usr/local/Cellar/python@3.8/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/python3.8/queue.py", line 178, in get raise Empty _queue.Empty

YueChen-C commented 3 years ago

嗯,好像有点 bug 。有时候能导出,有时候不行,我测试了下也是不能 100% 成功。我再看看

YueChen-C commented 3 years ago

解决了下 获取数据包乱序 的问题 14.6 测试基本正常 https://github.com/YueChen-C/py-ios-device/commit/924346375670b2aa641979840a0dac0d59e11582