runtime什么意思|程序运行阶段产生的环境与状态

runtime什么意思|程序运行阶段产生的环境与状态

最开始对着代码报错弹窗发呆,被邻座同事随口问到runtime什么意思,脑子里只能笼统说成程序出错的提示词,对着满屏红色报错代码来回拖拽滚动条,先前自学编程只背过编译相关词汇,压根没拆分过这个词组的两层含义,复制单词丢进翻译框只跳出运行时三个字,可落地到项目调试里完全摸不准边界,分不清编译阶段和runtime阶段各自负责什么内容,改代码的时候胡乱注释掉几十行代码,指望删掉报错相关语句就能抹平弹窗提示,折腾半个钟头,控制台依旧反复弹出runtime exception的提示,桌面浏览器还开着三四篇零散的翻译帖子,越对照越混乱,其实那会儿完全把词义局限在了故障提醒这单一含义上。

编译只管代码语法对错。

之前总混淆编译和运行两个环节,敲完代码点击运行按钮前,编译器会挨个筛查标点、变量定义、关键字书写错误,但凡少写分号、变量未声明都会直接拦截编译进程,项目压根没法启动,可runtime对应的环节是程序已经顺利启动之后,在实际调用数据、读取文件、接收前端参数的实时过程里出现的意外,上次对接后端接口,代码编译一次性通过,打包部署到本地环境后,点击页面功能就跳出runtime报错,反复核对源码语法没有任何疏漏,后来才反应过来是数据库里缺失了接口需要调取的字段,语法没问题但实际运行找不到数据源,这类问题全部归属于runtime范畴,那段时间连着三天下班留工位,挨个区分两类报错的触发时机,把碰到的报错分别标注是编译拦截还是runtime触发,记事本密密麻麻记满零碎标注,还顺手把项目里出现过的runtime报错按触发诱因简单归类,很多次熬到办公室只剩零星灯光,对着分类记录反复比对项目日志,慢慢剥离开两种报错的触发逻辑,不再一看见报错就下意识修改代码格式。

偶然在跟着前辈调试线上BUG的时候,刷新了第二层认知,runtime不单单指代报错,它还指代程序运行时依托的整套运行环境,同一份打包好的程序,放在本地开发环境可以正常运转,部署到服务器就频繁出现runtime异常,不是代码写错,是两端runtime环境配置不一样,本地预装的依赖包版本偏高,服务器环境的组件版本老旧,运行阶段加载资源的时候版本不兼容,先前从来没往环境层面考虑过,一直执拗的在源码里来回删改逻辑,白白耗费不少无用功夫,前辈随手修改服务器环境的依赖版本之后,原先持续弹出的runtime提示直接消失,才慢慢懂得这个词既能指代运行时间段落,也包含程序赖以运转的整套资源环境,之前死磕代码的做法,完全找错了排查的切入点。

平常写小脚本的时候也能直观感受到差别,用Python写完简易爬虫脚本,语法无误顺利执行就是编译通过,中途爬取网页突然断连、目标页面字段变动导致取值失败,脚本中途终止,这些突发故障全属于runtime层面问题,不用改动源代码的书写格式,只需要调整请求参数或者容错判断就能优化,试过好几次刻意写错标点,脚本直接卡在编译环节打不开,和runtime故障的表现形式有着很直观的区分。

有一回混淆runtime和SDK的概念,把运行环境和开发工具混作一团,对着运维发来的环境配置文档反复曲解内容,误以为更换SDK版本就能修复所有runtime故障,接连两次修改开发工具配置,上线之后故障依旧原样留存,运维在群里指出两者所属阶段完全不同,SDK服务于代码编写编译阶段,runtime依附程序启动后的全周期运行,那次出错之后,特意在笔记侧边划了横线,分开标注两个名词对应的工作区间。

慢慢摸到实操判断的简易法子,碰到提示带runtime的信息,优先排查运行过程里的资源、数据、环境配置,不用第一时间深挖代码语法书写,这套判断逻辑帮着缩减大半排查耗时,后续日常调试,看到runtime字眼,下意识跳过语法检查步骤,直奔环境和数据源核对,很少再做无用的源码删减操作。

偶尔还是会出现疏漏,部分隐藏很深的空指针报错,同样归属runtime,数据为空的情况编译阶段完全察觉不出,只有程序调取空数据时才会触发,碰上这类隐性故障,依旧要花小段时间遍历接口传输的数据源。

收拾桌面散落的便签纸,随手把写满runtime释义的纸条夹进工具书夹层。

了解更多百科知识请访问 百科