附录5 V调试及错误定位
最后更新于
最后更新于
实际使用V开发的过程中,有时会碰到一些奇怪的,难以定位的报错。
有些是自己代码本身的写法有问题,有一些确实会碰到编译器的bug。
如何快速地对错误进行定位和处理,会节省很多无谓的时间浪费。
从原理上来说V编译器的过程是: V代码=>C代码=>可执行文件。
正常来说V编译器会尽可能地发现编译错误,并给出比较明确的提示哪里出错了。
可是如果V编译器在生成C代码的过程中,生成有错的C代码,导致C编译器编译出错,就需要进一步的调试跟踪选项来定位错误。
除了安装V插件外,还需要安装C/C++插件:
https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
安装好C/C++插件后,开始配置:
打开菜单:运行->启动调试,第一次使用会弹出配置环境,配置环境为C++(GDB/LLDB),然后将配置launch.json文件为:
第一次配置好以后,再次点击运行->启动调试,就会显示调试视图。
在启动调试之前,要先用V编译器把源代码编译为带调试信息的二进制文件,然后再开始启动调试。
也可以将编译为带调试信息的二进制文件这一步配置到task.json中,这样就不用每次都用手工输入命令行了。
启动调式后,就可以看到C调试信息的输出。
还可以在代码中插入断点,查看变量值,单步调试等常规调试的操作。
idea系列中有专门的V语言开发插件:https://github.com/i582/vlang-idea。
如果结合clion使用,就可以直接进行调试,并且功能强大,稳定。
常用编译带调试选项:
-g
不做代码优化,加入更多的调试信息在生成的可执行文件中,编译器会强制把v源代码中的行号加入到跟踪堆栈stacktraces中。
如果启用了-g,断点要打在V源代码上
-cg
不做代码优化,加入更多的调试信息在生成的可执行文件中,编译器会强制把C源代码中的行号加入到跟踪堆栈stacktraces中,一般会配合-keepc使用,每次编译都会保留生成的C源代码。
如果启用了-cg,断点要打在C源代码上
-showcc
显示使用的C编译器的编译输出
-show-c-output
显示C编译器编译报错时的输出。
-keepc
不删除编译生成的C源代码,方便跟踪调试。
V编译时生成的C源代码会保存在:
如果设置了VTMP环境变量,会保存在VTMP中V_开头的目录中
如果没有设置VTMP环境变量,则保存在系统临时文件中V_开头的目录中
除了可以使用vscode的C/C++插件进行调试,也可以直接使用命令行调试:
可以使用help子命令查看所有生成C的选项:
要调式生成的js代码,可以激活sourcemap:
可以使用help子命令查看所有生成js的选项:
目前js后端生成的是ES5 strict的代码,ES6的还没有。
目前native后端还在开发中,目前还不支持调试。