【目标】
我们想要输出 function 对应的 graph 内容进行分析, 目前通过 dump 接口只能输出不完整的 CFG graph. 请问如何解决此报错? 如何输出完整的 graph?
【环境】
【调用方式】
在 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/include/graph.h 中声明dump
在 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/graph.cpp 中实现dump
在 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/tests/unittest/defect_scan_aux_test.cpp 中调用dump
此外, 还修改了 OpenHarmony/arkcompiler/runtime_core/compiler/optimizer/ir/dump.cpp 中 Graph::Dump 的实现:
以测试样例 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/tests/unittest/graph_test.js 为例,输出内容如下:
BB 6
prop: start, bc: 0x00000000
0.any Parameter arg 0
r249 -> r249 [u64]
1.any Parameter arg 1
r250 -> r250 [u64]
2.any Parameter arg 2
r251 -> r251 [u64]
3.any Parameter arg 3 -> (v85p, v63, v48, v37, v23)
r252 -> r252 [u64]
4.any Parameter arg 4 -> (v114, v63, v61, v48, v23)
r253 -> r253 [u64]
9.i32 Constant 0x0
17.i32 Constant 0x1 -> (v81, v19)
18.i32 Constant 0x2 -> (v81, v19)
26.i64 Constant 0x0 -> (v50, v25)
succs: [bb 0]
BB 0 preds: [bb 6]
prop: bc: 0x00000000
6. SaveState -> (v5) bc: 0x0000000f
5.any Intrinsic.NEWLEXENV_IMM8 v6 bc: 0x0000000f
8. SaveState -> (v7) bc: 0x00000013
7.any Intrinsic.LDUNDEFINED v8 bc: 0x00000013
11. SaveState -> (v10) bc: 0x00000021
10.any Intrinsic.LDLEXVAR_IMM4_IMM4 v11 -> (v19, v15) bc: 0x00000021
12. SaveState -> (v13) bc: 0x00000025
13.ref LoadString 288 v12 -> (v14) bc: 0x00000025
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
可以看到, 产生如下报错, graph并未完整输出
【问题】
请问发生此报错的原因是什么?
上述已输出的 graph 是否包含完整信息? 如果不完整, 缺失了哪部分信息?
如何修改代码能避免报错, 输出完整的 graph?
希望您能帮我解决这个问题!
我会持续关注这个issue, 如果解决问题需要更多详细信息, 也请告诉我.
感谢提交Issue!关于Issue的交互操作,请访问OpenHarmony社区支持命令清单。如果有问题,请联系 @godmiaozi @peijiajun @胡晓炜 。如果需要调整订阅PR、Issue的变更状态,请访问链接。
Thanks for submitting the issue. For more commands, please visit OpenHarmony Command List. If you have any questions, please refer to committer @godmiaozi @peijiajun @胡晓炜 for help. If you need to change the subscription of a Pull Request or Issue, please visit the link.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
感谢你的提问,针对你的问题:
非常感谢您的回复!
关于第一个问题,如果我们直接使用原始代码 runtime_core/compiler/optimizer/ir/dump.cpp (3.2-Beta5版本), 运行会直接报错。
原有代码:
报错信息:
这里的原因可能是由于GetMethodReturnType或GetMethodFullName函数只找到了头文件定义, 缺少具体实现
也就是说bug是原来代码中就存在的而不是修改导致的。
关于第二个问题,之前dump的输出并不是缺少部分信息,而是在输出过程中存在报错,报错如issue问题中所示。
后期经过我们分析是在dump过程中输出某些信息出错导致的,通过注释ArenaString any_base_type(AnyTypeTypeToString(mixin_inst->GetAnyType()), adapter)一行,可以输出大体上完整的CFG(包含0-7共8个BasicBlock)
但显然仍存在问题,猜测是irbuild构建过程中Graph的某些信息缺失导致的
请问,以上报错的具体原因是什么?方舟在Irbuild实现graph存在哪些未完成工作?
登录 后才可以发表评论