标题
⭐ vscode 同时调试 zig 与 c++ 即 利用 zig 作为 c/c++ 项目
clq
浏览(531) +
2023-01-05 15:29:19 发表
编辑
关键字:
[2023-01-05 20:03:42 最后更新]
⭐ vscode 同时调试 zig 与 c++ 即 利用 zig 作为 c/c++ 项目
本来是研究怎样在 vscode 中调试 zig 的,不料 zig 确实强悍。一旦 zig 项目调试通以后实际上可以作为 c/c++ 项目来进行开发,还能调试。
而 zig 本身就是无依赖的 c/c++ 编译器,因此这一组合几乎就成为了 vscode 下 c/c++ 项目的最佳配置。
1.
首先要在 vscode 中装上 zig 相关的插件,其中一个是 zig 原作者开发的。
目的是能提示 zig 的相关变量能代码提示,更重要的是要配置 zig 的语言服务器正常 (即 zls)。
这一步其实也比较折腾,后面会给实例。
这里会要求配置好 zls 的路径,以及那个配置 json 之类的。
2.
安装微软的 c++ 插件和 lldb 调试插件。
3.
要想让 c 语言中的断点生效,和 gcc 一样,在编译时要写上 "-g" 参数的。这在 zig 中是要修改项目自带的文件 build.zig
如下。
...
exe.setBuildMode(mode);
//--------------------------------------------------------
//clq c 语言的还要加上各种库
exe.linkLibC(); //链接标准库 libc ,这样才能使用 stdio.h 中的函数
//加入自定义的 c 源代码
exe.addIncludeDir("src");
//exe.addCSourceFile("src/cfuncs.c", &[_][]const u8{"-Wall"});
//exe.addCSourceFile("src/cfuncs.c", &[_][]const u8{"-g"}); //改成这个的话,可以在 lldb 和 cppvsdbg 类型的 vscode 配置中进行调试
exe.addCSourceFile("src/cfuncs.c", &[_][]const u8{"-g", "-Wall"}); //改成这个的话,可以在 lldb 和 cppvsdbg 类型的 vscode 配置中进行调试
//编译命令就是 zig build 。所以实际上就是可以将 zig 项目当做 c++ 项目来写
//--------------------------------------------------------
exe.install();
...
4.最后就是要写合适的 vscode launch.json 文件。
目前在 windows 上可以用 "type": "cppvsdbg", 同时调试 zig 和 c 。
而 "type": "lldb", 目前只能调试其中的 c 语言部分。
另外还不清楚 cppvsdbg 这种按道理是 msvc 编译器的项目在 mac 和 linux 是否可用。
示例如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
//--------------------------------------------------------
//这个不能运行
{
"name": "Debug",
"type": "gdb",
"request": "launch",
//"target": "./bin/executable",
"target": "${workspaceFolder}/zig-out/bin/zig_t2.exe",
// "target": "./zig_out/bin/zig_t2.exe",
//"target": "./1.exe",
// "program": "${workspaceFolder}/target/debug/rt1.exe",
"cwd": "${workspaceRoot}",
"valuesFormatting": "parseText"
},
//--------------------------------------------------------
//这个能运行,不能调试 //更新: 不能调试 zig 但是能调试加了 "-g" 编译标志的 c 代码
{
"type": "lldb",
"request": "launch",
"name": "lldb Debug",
"program": "${workspaceFolder}/zig-out/bin/zig_t2.exe",
"args": [],
// "cwd": "${workspaceFolder}",
"cwd": "${workspaceFolder}/zig-out/bin", //修改这个也没用
//"preLaunchTask": "rust_build"
},
//--------------------------------------------------------
//参考 https://zhuanlan.zhihu.com/p/463740524
//这个能成功调试
{
"name": "(Windows) 启动",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}\\zig-out\\bin\\zig_t2.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}\\zig-out\\bin",
"symbolSearchPath": "${workspaceFolder}\\zig-out\\bin",
"environment": [],
"externalConsole": false,
"logging": {
"moduleLoad": false
},
}
//--------------------------------------------------------
]
}
==================================================================
以上内容可能过时,目前在
https://github.com/clqsrc/sz_ui_align/tree/main/zig_file/
中会一直更新最新的发现内容。目前来说感觉 zig 作为 c/c++ 编译器确实好用,要感谢下 uber 对它的相关赞助 :)
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.