鸿蒙开发环境Unix调试失败?90%卡在这3个隐蔽配置
|
凌晨告警,鸿蒙Unix调试挂了,不是崩,是卡——debugger连上去之后就蹲着不动,log里连个handshake都没打全。我扒了三百七十二条告警,最后发现:它压根没想连你,它在等三个东西,缺一个,它就给你演默剧。这不是bug,是筛选器。 先扔结论:鸿蒙开发环境Unix调试失败?90%卡在这3个隐蔽配置。不是IDE版本不匹配,不是NDK路径写错,不是防火墙封端口——这仨我早筛过。是devicemanager的socket绑定方式、hm-sdk里的arch-env映射表、还有那个藏在~/.hdc/config.json底下第三层嵌套里、键名叫"allow_localhost_forwarding"却默认为false的字段。我敢打包票,这三个,少一个,你的gdbserver就在目标机上干瞪眼;多一个,它当场给你吐出堆栈——但没人告诉你它认这个。 那天下半夜两点零四分,DBA老陈穿双蓝拖鞋晃进来,鞋后跟裂了半边,踩地时“嗒…嗒…”漏风。他顺手摸了我桌上凉透的美式,喝一口皱眉:“你这咖啡渍都爬到工牌磁条上了。”我低头一看,褐色印子从“张工”俩字一路糊到二维码边缘,扫都扫不出来。他没等我答,又晃出去了,门还没关严,空调嗡的一声猛抽风,冷气灌得我后颈一紧。
文章配图,仅供参考 说回那个devicemanager的socket绑定——它根本不管你在IDE里填的是127.0.0.1还是localhost。它只认/etc/hosts里那一行有没有把localhost映射到::1前面。你要是像我们机房新来的实习生那样,为了“IPv6优先”把::1 localhost放第一行,恭喜,hdc list devices能刷出来,但gdb attach必超时。我原以为是adb兼容层问题,结果抓包一看:它发SYN到::1,目标机根本没回。换成127.0.0.1才动。这个我敢打包票。可为什么它不读/etc/nsswitch.conf?我不知道。SDK文档里连“socket binding policy”这七个字都没出现过。 然后是hm-sdk里的arch-env映射表。你以为arm64-v8a就是arm64?错了。鸿蒙在Unix模式下启动gdbserver时,会去sdk/platforms/hm-xxx/build/下查一个叫target_arch_alias.yaml的文件,里面写着: 至于那个allow_localhost_forwarding……算了,不说了。上周五我调休申请被驳回,理由是“系统调试高峰期不得离岗”。我回邮件写“那我站着睡”,抄送老板和HR。老板没回,HR回了个表情包:一只熊猫瘫在竹子上。到现在我还不知道这算批准还是警告。 最后那个config.json字段,藏得深,改起来更邪乎。它不在IDE生成的config里,得自己手写进去;而且不能写成布尔值true,得写成字符串"true"——写成true?解析器吃掉。写成TRUE?它报JSON parse error。只有小写引号裹着的"true"才行。我试过六种写法,第七次成功纯属手抖多按了个空格,格式刚好对了。你说荒谬不荒谬?可这就是它的运行时契约。没有文档,没有warning,只有静默失败。你盯着gdb log里那句"remote target not ready"看半小时,其实它早把错误日志写进/dev/shm/.hdc_err_XXXXX——但那文件权限是600,owner还是hdc daemon进程,你su都切不过去。 所以我现在改了习惯:每次拉新镜像,先curl -s https://repo.huawei.com/.../hdc-dump-config | grep allow_localhost。不为别的,就为心里那点掌控感。当然也可能没用,因为上个月有个同事说他的问题出在SSH隧道的KeepAlive间隔设成了18秒——而鸿蒙Debugger握手超时是15秒。他删掉一行net.ipv4.tcp_keepalive_time配置,就好了。这个我说不准,但我亲眼见他改完重启sshd,连了七次全通。他改完坐那儿愣了两分钟,手机又响,还是没接。 优胜劣汰。真优胜劣汰。不是考你会不会配path,是考你愿不愿意花三晚上翻编译日志,在devicemanager源码里grep“localhost”,再比对两个不同日期打的aosp分支tag之间的hdc diff。这种活干多了,人确实变瘦,但眼神亮。我上周体检报告里有一项“轻度焦虑倾向”,医生问我工作强度,我反问:“您知道hdc log里第4789行‘handshake timeout’后面其实跟着个括号,里面写了retry_count=3吗?”他笑了,说不用治,这是职业勋章。 今晚我还得去看机房——他们说新上架的ARM服务器风扇转速不一致,左排比右排慢三百RPM。我打算先拿听诊器听听,再决定要不要动/dev/ttyS0。要是听见什么异常谐波,我就给DBA老陈发个消息:“蓝拖鞋带双新的来。” (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Unix调试总卡壳?19年老司机揭秘5大隐性陷阱