鸿蒙开发环境Unix调试失败?90%卡在这3个隐蔽配置
|
去年二月,我蹲在三号机房调试鸿蒙 DevEco 的 Unix 调试通道,空调外机哐哐撞墙,隔壁 CDN 运维老周端着泡面路过,汤汁滴在 UPS 机柜散热格栅上,滋啦一声。我没抬头——当时正盯着 adb logcat 输出里一行没头没尾的“connect: Connection refused”,第十七次重装 ohos-ndk-2.0.2.3.tar.gz。 这个我敢打包票:不是 JDK 版本不对,不是 .bash_profile 里 PATH 拼错了顺序,更不是你 devicemanager 配置文件少了个空格。是三个位置,卡得特别安静——连日志都不报错,只给你一个安静的 timeout。昨天小李在群里 @ 我发截图,说“Unix 下 debug 启动瞬间就断”,配了个捂脸表情包,还带个“???”,我回了句“看你 /etc/hosts”,他三分钟后撤回了消息。 第一个是 sshd_config。不是让你开 PasswordAuthentication,也不是改 Port,是你得把 PermitTunnel yes 这行手动写进去,且必须写在 Match User ohos-dev 这段配置之后——注意,不是 Group,是 User。我原以为 Match Group devops 就够了,结果真机连接到一半直接静默掉线。后来查 man sshd_config 第八页角落里一行小字:“Tunnel requires explicit user-level permission when using match blocks”,没写“否则失败”,就写了“requires”。服务器不报错,ssh -v 也只多打两行 debug1,但就是不通。我删了这行,debug 成功;加回去,立刻卡住。反复四次,工位上的烤冷面凉透了,辣椒油结成膜。 第二个更哑巴:devicemanager 启动时加载的 libhdc.so 会偷偷读取 ~/.hdc/config.json 里的 “use_proxy”: false 字段,但这个字段默认根本不存在。你新建 config.json 写进去,它不认;你用 hdc start --proxy=false 启动,它假装看见了,实则走系统级代理路由表——而华为云的 ECS 默认开了 squid 透明代理,端口 3128。监控又跳了一条报警:TCP_Retrans_Segs 突增 247。我们运维小王蹲着看 tcpdump,突然说:“哎,你那个 hdc 进程,SYN 发了三次,第三次被 reset 回来。”我说哦,他指了下屏幕右下角时间戳:“十八秒。”
文章配图,仅供参考 第三个……算了,先说个别的。上周五备案系统崩了,我顺手帮法务姐填完那张十二栏的《APP 隐私政策更新确认函》,她递来半块德芙,说是刚拆的,我咬一口,发现是黑巧。她说“你上次说蜘蛛爬首页慢,是不是 nginx gzip 压缩率太高了?”我说不是,是 sitemap.xml 的 lastmod 写了未来时间戳,百度蜘蛛直接 skip 掉整个 site。她哦了一声,转头去改备案域名的 DNS TTL,把 3600 改成 600。这事和鸿蒙没关系,但那天我俩都忘了吃饭,工位抽屉里还有去年十一月的代金券。第三个是 SELinux。不是 enforcing 或 permissive 的事——是 /dev/shm 权限策略。鸿蒙调试器要用 mmap 到共享内存区做 IPC 中继,但默认策略只允许 u:r:hal_hdc:s0 类型进程访问 tmpfs 下的 /dev/shm/ohos-debug- 子目录。你 runas hdc,或者 setenforce 0,它跑得飞快。可一旦用 system_server 用户启动调试服务(也就是真机调试模式),selinux_policy.c 里那行 allow hal_hdc tmpfs_file:dir { search add_name remove_name } 就被忽略。我查了 kernel dmesg ——没有 avc deny 日志。完全静音。直到我在 /sys/fs/selinux/enforce 里 echo 0 的前一秒,看到屏幕上闪出半帧红色错误:[hdc] mmap: Permission denied (src/transport/posix/shm.cc:112)。就这一行,像眨眼一样没了。 所以说优胜劣汰是真的。不是筛技术,是筛谁愿意翻三遍内核文档,愿意盯着 /proc/self/status 看 CapEff 值变化,愿意凌晨两点重刷 openharmony-v4.1.0-beta3 的 initramfs。群里昨天有新人问:“能直接套 Dockerfile 吗?”我没回。旁边同事敲键盘声音太大,我抬头看了眼他屏幕——他在改 CI pipeline 的 spider-crawl-rate 限速阈值,从 12 改成 8,理由是“避免触发搜狗蜘蛛反爬机制”。他喝了一口凉掉的美式,杯子底下压着张纸条,写的是“鸿蒙调试日志路径已同步至 wiki L456”。我没拿来看。 所以现在,我打算把 ohos-ndk 解压目录 chmod -R 755 后,再进到 tools/ 目录里单独 chmod +x hdc,然后再跑一次。不为别的,就为验证下是不是 bin/hdc 和 libexec/hdc 实际用的不是同一个动态链接器缓存。我原以为 ldconfig -p | grep libz.so 就够了,结果今天早上发现它链接的是 /usr/lib64/libz.so.1,而鸿蒙工具链编译时 link 的是 build/prebuilts/ndk/23/lib64/libz.so ——版本号一模一样,但校验和差三百七十二字节。这事儿我说不准,得等它跑完。现在我听见空调外机又开始撞墙了。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Unix调试总卡壳?5个隐性陷阱90%开发者中招

