[BETA] CovScript 调试信息: cSYM

从 3.4.2 Build 15 起,CovScript 解释器正式支持了 cSYM (CovScript Symbols) 调试信息,可以通过 --csym 或 -g 指定源文件对应的 cSYM 文件
cSYM 文件的作用主要是为了解决 ECS 之类构建在 Cov3 基础上的语言报错无法与源代码对应的问题,其文件组成也非常简单,为一个 cSYM 文件头和源文件代码组成:

#$cSYM/1.0(文件名):映射序列...
源文件代码

映射序列的规则本身也非常简单,即 Cov3 代码具体哪一行对应源文件哪一行,每个记录之间用逗号分隔,用 - 代表这段代码是内部实现,比如:

#$cSYM/1.0(picasso.ecs):-,-,-,-,0,2,3,4,5,8,9,10,11
package picasso

import picasso_base as base
import picasso_activity as activities
import picasso_widget as widgets
import picasso_window as windows
# import picasso_layout as layouts

link simple_activity = base.simple_activity
link simple_window = base.simple_window
link linear_layout = base.linear_layout
link application = base.application

而这段 cSYM 对应的 Cov3 代码是:

# Generated by Extended CovScript Compiler
# DO NOT MODIFY
# Date: Sat Apr  1 01:22:36 2023
import ecs as picasso_ecs
package picasso
import picasso_base as base
import picasso_activity as activities
import picasso_widget as widgets
import picasso_window as windows
link simple_activity = base.simple_activity
link simple_window = base.simple_window
link linear_layout = base.linear_layout
link application = base.application

可以看到,cSYM 文件格式简单,非常易于生成和读取
除此之外,CovScript 解释器还会在 import 模块时在同目录下寻找同名的 .csym 文件,若存在则自动引入,并在出现错误时自动替换为模块的 cSYM 信息
目前 ECS 已经支持了通过同样的 -g 选项在编译时生成对应的 .csym 文件
image
这是模块中出现的运行时错误
image
这是主文件中出现的运行时错误
可以看到,cSYM 很好的解决了基于 Cov3 的语言无法在运行时准确报错的问题。以前的版本中,报错信息往往晦涩难懂,若不是有经验的开发者很难找出具体问题,现在则可以非常直观的直接找到源文件中具体哪一行出了问题,极大降低了使用门槛

我会在最近把调试器的 cSYM 支持做好,这样 Cov3 作为一个语言后端就基本具备完整功能了
这些都是在给未来的 minicov 打基础,也是为了迎接即将 port 到 Cov3 生态的洛书语言
招募对建设国产语言生态联盟感兴趣的朋友 - CovScript 智锐 - 国产编程语言 (osanswer.net)

1 个赞

今后会需要更细致的定位信息吗?比如某行中的具体位置。

目前可能很难了,需要重构底层
但也留出来后期迭代的空间了嘛,文件头格式整体来说是

#$cSYM/版本号(文件名):信息


调试器也可以用了


ECS 也已经搞定了


第一个使用 ECS 编写的包正式发布了,伴随着 CSPKG 对 cSYM 的正式支持
只需要在编写包索引时为 cSYM 文件单独编写一个 JSON,并将包名命名为 .csym
用户可以按需下载,不会和包本体绑定

image
示例的 CSPKG 包索引

感觉 “Info” 有点宽泛,好像用 description 或 introduction 比较多。