已合并
fix: ASCEND_WORK_PATH指定trace日志产出文件的落盘路径,实际落盘到默认路径下 (#758) #3746
GuoWenbo创建于 7月21日
fix: ASCEND_WORK_PATH指定trace日志产出文件的落盘路径,实际落盘到默认路径下 (#758) #3746
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 GuoWenbo 的贡献)atomgit-bot
7月21日 评论:
7月21日 评论:
变更摘要
本次 PR 修复了当 ASCEND_WORK_PATH 环境变量设置为相对路径(如 ./trace)时,atrace 日志文件无法正确落盘到指定路径、而是回退到默认 $HOME/ascend 路径的问题。核心思路是在路径校验前新增路径规范化步骤:对于非绝对路径,通过 getcwd 获取当前工作目录并拼接为绝对路径,再继续后续的目录存在性检查和创建逻辑。同时补充了针对相对路径场景的单元测试。
主要改动
- 新增
TraceNormalizeEnvPath函数:在trace_recorder.c中新增该静态函数,用于检测ASCEND_WORK_PATH是否为绝对路径;若不是,则获取当前工作目录并拼接出绝对路径写回envDir,确保后续操作基于绝对路径进行。 TraceGetValidPath增加路径规范化调用:在原有的目录存在性检查和递归创建之前,先调用TraceNormalizeEnvPath对路径进行规范化,避免相对路径直接传入TraceAccess导致行为异常。- 新增
ScopedCwdAndEnv测试辅助类:在trace_recorder_utest.cc中引入 RAII 风格的辅助类,负责在测试期间保存/恢复当前工作目录并清理环境变量,为相对路径测试提供隔离的运行环境。 - 新增
TestRecordEnvRelativePath测试用例:通过切换到测试目录、设置ASCEND_WORK_PATH=./trace、写入 trace 数据并断言生成的文件路径包含正确的绝对前缀,验证相对路径场景下日志文件落盘位置的正确性。


不准确?
atomgit-bot
7月21日 评论:
7月21日 评论:
代码审查
关闭总结
已审查文件
| 文件 | 审查结果 |
|---|---|
src/dfx/trace/atrace/utrace/recorder/trace_recorder.c |
发现 1 个 P2 问题(strcpy_s 缓冲区大小边界条件) |
tests/ut/atrace/ut/utrace/testcase/trace_recorder_utest.cc |
发现 2 个 P3 建议(重复 TraceRecorderExit() 调用、oldCwd_ 缓冲区偏小) |
问题汇总
- P0: 0
- P1: 0
- P2: 1 —
TraceNormalizeEnvPath中strcpy_s(envDir, len, absPath)在标准化后路径恰好为MAX_FILEDIR_LEN(255)字符时,目标缓冲区偏小 1 字节导致strcpy_s截断失败 - P3: 2 — 测试中的冗余
TraceRecorderExit()调用和ScopedCwdAndEnv的oldCwd_缓冲区在深层路径下可能过小
整体风险评估
低风险。核心修复逻辑(相对路径转绝对路径)设计正确,能有效解决 Issue #758 描述的问题。P2 问题触发窗口极窄(需 strlen(cwd) + strlen(envDir) == 254),在常规使用场景下几乎不会触发,但建议修复以消除边界条件隐患。测试代码的 P3 建议不影响功能正确性。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


不准确?
7月21日 添加了label:cann-cla/yes
此处折叠了48条消息 查看更多
zhuliangying
7月23日 评论:
7月23日 评论:
/approve


7月23日 添加了label:approved
zhangjie
7月23日 评论:
7月23日 评论:
/lgtm


7月23日 添加了label:lgtm
7月23日 合入了pull request
Pull Request
描述
ASCEND_WORK_PATH=./trace等相对路径无法作为 atrace 落盘根目录的问题,避免回退到默认$HOME/ascend路径。src/dfx/trace/atrace/utrace/recorder/trace_recorder.ctests/ut/atrace/ut/utrace/testcase/trace_recorder_utest.ccDiff 摘要
变更类型
关联的Issue
https://gitcode.com/cann/runtime/issues/758
如何测试
cmake --build build --target utrace_utest -j8./build/tests/ut/atrace/ut/utrace/utrace_utest --gtest_filter=TraceRecorderUtest.TestRecordEnvRelativePath./build/tests/ut/atrace/ut/utrace/utrace_utestgit diff --check核对清单
其他信息
ScopedCwdAndEnv保护用例现场。