39 Star 59 Fork 411

OpenHarmony / arkcompiler_runtime_core

 / 详情

在 libark_defect_scan_aux 部分通过 dump 接口输出 graph 报错

进行中
任务
创建于  
2023-06-18 11:56

【目标】

我们想要输出 function 对应的 graph 内容进行分析, 目前通过 dump 接口只能输出不完整的 CFG graph. 请问如何解决此报错? 如何输出完整的 graph?

报错

【环境】

  • ubuntu 20.04
  • 源代码版本 OpenHarmony Beta5(2023-01-31)

【调用方式】

在 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/include/graph.h 中声明dump

h

在 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/graph.cpp 中实现dump

cpp

在 OpenHarmony/arkcompiler/runtime_core/libark_defect_scan_aux/tests/unittest/defect_scan_aux_test.cpp 中调用dump

defect

此外, 还修改了 OpenHarmony/arkcompiler/runtime_core/compiler/optimizer/ir/dump.cpp 中 Graph::Dump 的实现:

compiler

以测试样例 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, 如果解决问题需要更多详细信息, 也请告诉我.

评论 (4)

王越 创建了任务

感谢提交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.

openharmony_ci 添加了
 
waiting_for_assign
标签
peijiajun 负责人设置为zhuoli72
peijiajun 任务状态待办的 修改为进行中

您好, @zhuoli72 ,issue已经分配给您,请及时处理。

@zhuoli72 , the issue has been assigned to you. Please handle it in time.

openharmony_ci 移除了
 
waiting_for_assign
标签
openharmony_ci 添加了
 
waiting_for_fix
标签

感谢你的提问,针对你的问题:

  1. 仅用未更改的原始dump接口是否会报上述错误,如果不会,建议排查一下是否是你对dump接口的修改引入了这个问题
  2. 原始dump接口得到的graph有哪些信息是你认为缺少的

非常感谢您的回复!

关于第一个问题,如果我们直接使用原始代码 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存在哪些未完成工作?

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(3)
7387629 openharmony ci 1656582662
1
https://gitee.com/openharmony/arkcompiler_runtime_core.git
git@gitee.com:openharmony/arkcompiler_runtime_core.git
openharmony
arkcompiler_runtime_core
arkcompiler_runtime_core

搜索帮助

344bd9b3 5694891 D2dac590 5694891