已合并
add ios backtrace #691
add ios backtrace #691
已合并
liwenzhen3创建于 7月9日
liwenzhen3
liwenzhen3成员
7月9日

Thanks for your contribution to ArkUI-X!

This repository is a read-only mirror that isn't used for accepting issues or pull requests.
To join and contribute to ArkUI-X, please visit our official open source website at https://gitee.com/ArkUI-X.

Learn how to contribute >>

likedislike
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 liwenzhen3 的贡献)
liwenzhen3liwenzhen3成员
7月9日 关联了issue:add ios backtrace
liwenzhen3
liwenzhen3成员
7月9日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
7月9日 评论:

感谢提交 Pull Requests!
Thanks for submitting a pull request.

likedislike
openharmony_ciopenharmony_ci成员
7月9日 添加了label:dco检查成功
openharmony_ci
openharmony_ci成员
7月9日 评论:

本地或库上代码有更新,全量重新构建,重置所有关联PR的验证状态
门禁构建开始,包含静态检查、代码编译【mac_arm_arkui_ios编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a4f02ff64650f998bba8d1a/runlist

likedislike
openharmony_ciopenharmony_ci成员
7月9日 添加了label:编译成功
openharmony_ciopenharmony_ci成员
7月9日 添加了label:静态检查成功
openharmony_ciopenharmony_ci成员
7月9日 通过测试
openharmony_ci
openharmony_ci成员
7月9日 评论:

代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a4f02ff64650f998bba8d1a/runlist

静态检查:

# check type result report
1 codeCheck pass >>>

编译测试:
# Device build result package
1 mac_arm_arkui_ios success >>>

likedislike
此地不宜久刘同学
此地不宜久刘同学成员7月9日进行代码检视2
osal/backtrace_handler.cpp
@@ -0,0 +255,4 @@
255+ for (; idx < MAX_STACK_DEPTH; ++idx) {
256+ // [fp + 0] = saved x29 (previous frame), [fp + 8] = saved x30 (LR).
257+ uintptr_t lr = *reinterpret_cast<uintptr_t*>(fp + 8);
258+ uintptr_t next = *reinterpret_cast<uintptr_t*>(fp);
此地不宜久刘同学
此地不宜久刘同学7月9日评论:

fp 链解引用未做可读性校验,递归崩溃会丢失已生成的转储

问题:DumpBacktrace 在 FP 链遍历循环中直接对 fp 解引用,未对待读地址做任何可读性校验。证据代码行:uintptr_t lr = *reinterpret_cast<uintptr_t*>(fp + 8);uintptr_t next = *reinterpret_cast<uintptr_t*>(fp);(osal/backtrace_handler.cpp:257-258)。影响:当 fp 链被破坏或指向未映射内存(栈溢出、堆损坏、JIT/JS 帧缺少帧指针等场景)时,该解引用会在信号处理函数内部再次触发 SIGSEGV;由于 CrashHandler 入口已用 g_inHandler.compare_exchange_strong 设置重入保护,递归进入的处理函数会直接走 ForwardToPrevious 返回,局部变量 DumpBuffer dump 中已收集的部分转储永远不会经 FlushDump 输出,已生成的回栈信息全部丢失。建议:在每次解引用前先 FlushDump 将已缓冲内容落盘(或改为逐帧 write),确保后续解引用崩溃时已打印帧仍保留;并增加对齐校验(arm64 上 fp 应 16 字节对齐)以提前过滤明显非法的 fp 值。

Severity: warning

likedislike
liwenzhen3
liwenzhen3成员
7月13日 评论:

已修改

ChaoZZ成员7月13日进行代码检视2
osal/backtrace_handler.cpp
@@ -0,0 +347,4 @@
347+ ss.ss_size = sizeof(altStack);
348+ ss.ss_flags = 0;
349+ sigaltstack(&ss, nullptr);
350+}
ChaoZZ7月13日评论:

sigaltstack 仅在 init 线程生效,其余线程栈溢出时无法安全转储

Darwin 上 sigaltstack 是 per-thread 的,InstallAltStack 只为调用 InitBacktraceHandler 的那一个线程注册了备用栈。配合 SA_SIGINFO|SA_ONSTACK,只有该线程的栈溢出类 SIGSEGV 能在备用栈上运行 CrashHandler;其它线程发生栈溢出时,处理函数仍在本线程已近耗尽的栈上运行,进入函数即因分配 DumpBuffer 等局部变量再次触发 SIGSEGV,而该信号在处理期间被自动屏蔽,内核直接执行默认动作终止进程,不产生任何转储。此外 sigaltstack 的返回值未检查,注册失败时备用栈同样不生效。影响:多线程 iOS 应用中绝大多数线程的栈溢出崩溃将完全无输出。建议:在框架派生线程的创建处统一调用 sigaltstack 为每个线程注册备用栈,并检查返回值;若确实不做,应在注释中明确仅 init 线程的栈溢出可被捕获。

严重程度:一般

likedislike
liwenzhen3
liwenzhen3成员
7月14日 评论:

已修改

ChaoZZ成员7月13日进行代码检视2
osal/backtrace_handler.cpp
@@ -0,0 +358,4 @@
358+ return;
359+ }
360+ 
361+ LoadImages(); // pre-cache dyld image table (dyld is not async-signal-safe)
ChaoZZ7月13日评论:

初始化后动态加载的镜像不会进入缓存,FindImage 无法归属这些帧

g_images 仅在 LoadImages 中快照一次 dyld 镜像表,此后通过 lazy load / dlopen 加载的系统库与动态库不会写入缓存。处理函数中 FindImage 对这些 PC 返回 nullptr,对应帧只输出裸 pc 而无法给出 +0x,无法用 atos 符号化。iOS 应用普遍存在大量懒加载/运行时加载的框架,这部分帧将长期缺失归属,显著削弱回栈可用性。建议:在 init 时额外调用 _dyld_register_func_for_add_image 注册回调,镜像加载时增量更新 g_images,并妥善处理与处理函数读侧的并发。

严重程度:一般

likedislike
liwenzhen3
liwenzhen3成员
7月14日 评论:

当前pr不支持lazy load,该场景暂不触发,后续按需看是否按bugfix支持

ChaoZZ成员7月13日进行代码检视3
osal/backtrace_handler.cpp
已过期
@@ -0,0 +225,4 @@
225+ default: AppendLit(b, "?"); break;
226+ }
227+ AppendLit(b, "), si_code ");
228+ AppendDec(b, info ? static_cast<uint32_t>(info->si_code) : 0);
ChaoZZ7月13日评论:

si_code 强转 uint32_t 使负值(如 abort() 的 SI_USER)显示为超大数

info->si_code 类型为 int,而 AppendDec 接收 uint32_t。对经 raise/pthread_kill 投递的信号(典型如 abort() 触发的 SIGABRT,si_code 为 SI_USER 等负值,例如 -2),static_cast<uint32_t> 会输出成 4294967294 这类无意义大数,干扰排查。建议新增有符号十进制输出辅助函数(或对 si_code 按有符号格式化),使 si_code 显示为正常的负值。

严重程度:提示

likedislike
System
系统消息系统
7月13日 评论:

changed this line on df2761cc view diff detail

liwenzhen3
liwenzhen3成员
7月14日 评论:

已修复

ChaoZZ成员7月13日进行代码检视3
osal/backtrace_handler.cpp
已过期
@@ -0,0 +32,4 @@
32+namespace OHOS::Ace::Platform {
33+namespace {
34+ 
35+constexpr const char* LOG_TAG = "ArkUI-x";
ChaoZZ7月13日评论:

LOG_TAG 定义后全程未被引用

匿名命名空间中的 constexpr const char* LOG_TAG 在整个文件中没有被使用(转储头部使用的是字面量 "ArkUI-x native crash",并未引用该常量)。这属于死代码,且在开启 -Wunused-const-variable 的严格构建配置下会触发告警。建议删除该常量,或在所有输出处统一引用 LOG_TAG 以保持一致。

严重程度:提示

likedislike
System
系统消息系统
7月13日 评论:

changed this line on df2761cc view diff detail

liwenzhen3
liwenzhen3成员
7月14日 评论:

已删除无用字面量

liwenzhen3liwenzhen3成员
7月13日 测试状态已重置,测试人: openharmony_ci
liwenzhen3liwenzhen3成员
7月13日 强制推送  17 个提交:c84fb2f0-16 commits from branch masterdf2761cc-add FP backtrace for ios
openharmony_ciopenharmony_ci成员
7月13日 删除了label:编译成功
openharmony_ciopenharmony_ci成员
7月13日 删除了label:静态检查成功
openharmony_ci
openharmony_ci成员
7月13日 评论:

代码有更新,重置PR验证状态

likedislike
openharmony_ci
openharmony_ci成员
7月13日 评论:

感谢提交 Pull Requests !此PR未通过DCO校验。
校验失败可能原因:

1. 未签署“DCO协议”(开发者原创声明协议),在线签署、查看签署状态

2. Commits 中未包含 Signed-off-by信息,参考FAQ处理

修复上述问题后,在PR的评论框输入“check dco” ,单击”评论”,系统将再次进行DCO校验。

当前检测到如下Commits的Signed-off-by邮箱未签署DCO协议:


Thanks for submitting a pull request. This pull request has not passed the DCO check.
Possible causes:

1. You have not signed the Developer Certificate of Origin (DCO). Sign the DCO and check DCO status.

2. The commits do not contain the Signed-off-by information. To resolve this issue, see FAQs.

After resolving the preceding issues, enter check dco in the comment box of this pull request and click Comment. The system will check DCO status again.

The Signed-off-by emails in the following commits have not signed the DCO:

likedislike
openharmony_ciopenharmony_ci成员
7月13日 删除了label:dco检查成功
openharmony_ciopenharmony_ci成员
7月13日 添加了label:dco检查失败
liwenzhen3liwenzhen3成员
7月13日 强制推送  1 个提交:5e2889e5-add FP backtrace for ios
liwenzhen3
liwenzhen3成员
7月13日 评论:

check dco

likedislike
openharmony_ci
openharmony_ci成员
7月13日 评论:

感谢提交 Pull Requests!
Thanks for submitting a pull request.

likedislike
openharmony_ciopenharmony_ci成员
7月13日 删除了label:dco检查失败
openharmony_ciopenharmony_ci成员
7月13日 添加了label:dco检查成功
openharmony_ci
openharmony_ci成员
7月13日 评论:

感谢提交 Pull Requests!
Thanks for submitting a pull request.

likedislike
liwenzhen3liwenzhen3成员
7月14日 强制推送  1 个提交:29782f36-add FP backtrace for ios
openharmony_ci
openharmony_ci成员
7月14日 评论:

感谢提交 Pull Requests!
Thanks for submitting a pull request.

likedislike
liwenzhen3
liwenzhen3成员
7月14日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
7月14日 评论:

本地或库上代码有更新,全量重新构建,重置所有关联PR的验证状态
门禁构建开始,包含静态检查、代码编译【mac_arm_arkui_ios编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a55dc0964650f998bd22ce3/runlist

likedislike
liulongliulong成员
7月14日 将longruoluo设为审查人
此处折叠了7条事件消息 查看更多
openharmony_ciopenharmony_ci成员
7月14日 通过测试
openharmony_ci
openharmony_ci成员
7月14日 评论:

代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a55dc0964650f998bd22ce3/runlist

静态检查:

# check type result report
1 codeCheck pass >>>

编译测试:
# Device build result package
1 mac_arm_arkui_ios success >>>

likedislike
openharmony_ciopenharmony_ci成员
7月14日 关闭了关联的issue
openharmony_ciopenharmony_ci成员
7月14日 合入了pull request,合并节点 SHA:bf0c4a639ab5f06f9a72501255eae16e449d2e90