Skip to main content

Debug 调试功能

使用模版创建的 CC++JavaPythonGoRuby 等代码空间默认支持了Debug功能。你可以通过点击侧边栏菜单里的调试器图标,打开调试器窗口,添加断点后,开始调试,如下:

Debug01

断点是在调试时程序将暂停执行的代码行。当程序暂停时,调试器侧栏将显示所有变量的值,从而避免了添加print / log语句的需要。

当程序暂停时,其他调试按钮将被启用,如:

  • 下一步 将使程序前进到下一个可能的行,在那里程序可以在源代码中停止。例如,如果当前行正在调用函数,则 下一步 将进入函数内部。如果这是函数的最后一行,下一步 将返回到调用该函数的位置。
  • 下一个断点 将使程序前进到下一个断点,或者如果在当前断点之后没有更多断点,则前进到程序完成。
  • 停止 将终止调试会话并终止正在调试的进程。

多人协同调试

1024Code IDE 内调试程序时,所有协作者都将看到任何其他协作者所做的所有调试操作,包括:

  • 断点
  • 程序暂停的位置
  • 变量的内容
  • 控制台的输出

效果如下:

Debug03

设置Debug功能

Debug功能的启用与否,是否能正常调试,受配置文件和Nix管理的环境基础依赖控制。部分未启用或者Debug功能不正常的代码空间,我们可以通过以下方式设置Debug功能,使其启用或者恢复正常。

已经启用Debug功能的代码空间,我们可以在Debug调试器窗口中点击设置按钮,在打开的Debug设置弹窗中,修改Debug参数,以恢复Debug功能。

Debug02

启用Debug功能

在未启用Debug功能的代码空间里我们可以通过修改.1024文件和通过Nix安装Debug需要的基础依赖,来启用Debug功能。

Debug04

.1024文件中,debug功能参数对应的数据结构为:

debug: 
compile: string // 编译执行命令,需要目标程序携带调试信息
support: bool // 是否支持debug,向前兼容
launch: map[string]any // dap协议launch相关参数

通过Nix安装Debug需要的基础依赖步骤:

  1. shellvi/vim 打开 .1024nix 文件
  2. packages中添加需要的依赖,如pkgs.gdb
  3. 额外指定nix文件的overlays,修改.1024nix 文件第一行内容:
# 删除第一行
# { pkgs ? import <nixpkgs> {} }
# 新增以替换
{ pkgs ? import <nixpkgs> { overlays = [(import /etc/nix/nixpkgs-showmebug/overlay.nix)];} }:

Java

.1024文件配置:

debug:
compile: javac -encoding utf-8 -g -cp . Main.java # -g 附带调试信息
launch:
mainClass: Main
classPaths: ["."]
cwd: .
console: integratedTerminal
internalConsoleOptions: neverOpen
support: true

launch相关参数 https://code.visualstudio.com/docs/java/java-debugging#_launch

注意事项

  • java debug 是属于lsp的一个插件启动
  • consoleintegratedTerminal
  • internalConsoleOptionsneverOpen

Python3

.1024文件配置:

debug:
support: true
launch:
program: # 文件
module: # 模块
python: # python参数 []string类型
args: # 目标参数 []string类型
django: # 是否为django
console: integratedTerminal
env:
PYTHONIOENCODING: UTF-8
PYTHONUNBUFFERED: 1

# 最简示例
debug:
support: true
launch:
program: main.py
console: integratedTerminal

launch相关参数 https://code.visualstudio.com/docs/python/debugging#_request

需要 pip install debugpy

  • 换源 pip install debugpy -i [https://pypi.tuna.tsinghua.edu.cn/simple/](https://pypi.tuna.tsinghua.edu.cn/simple/)

注意事项

  • consoleintegratedTerminal

Go

硬性要求使用go mod,需要使用到dlvgo install github.com/go-delve/delve/cmd/dlv@latest

nix文件shellHook里加上

export PATH=$PATH:~/go/bin

在.1024文件配置

debug:
support: true
launch:
request: launch
mode: debug
program: .
console: integratedTerminal
cwd: .

launch相关参数https://github.com/golang/vscode-go/wiki/debugging#configuration

注意事项

  • consoleintegratedTerminal

C/C++

.1024文件配置:

debug:
compile: # 编译命令,如:gcc(g++) -g -O0 testc -o test ( -g附带调试信息 -O0关闭优化)
support: true
launch:
program: ./test // 上面compile编译出可执行文件的路径
MIMode: gdb
miDebuggerPath: gdb
externalConsole: true
cwd: .
setupCommands:
- text: -enable-pretty-printing
ignoreFailures: true
miDebuggerArgs: -q -ex quit; wait() { fg >/dev/null; }; gdb -q --interpreter=mi // gdb情况下使用

launch相关参数https://code.visualstudio.com/docs/cpp/launch-json-reference#_configure-vs-codes-debugging-behavior

注意事项

  • 需要使用nix的方式额外安装gdb或者lldb依赖:

    pkgs.gdb // 或者 pkgs.lldb
    pkgs.paaspkgs.cppdap
  • 需要修改在nix文件的overlays,将第一行改为{ pkgs ? import <nixpkgs> { overlays = [(import /etc/nix/nixpkgs-showmebug/overlay.nix)];} }:

  • 推荐使用gdb

  • externalConsoletrue

Ruby

.1024文件配置:

debug:
support: true
launch:
script: ruby main.rb # 就是程序的启动命令
localfs: true

注意事项:

  • gem install debug
  • 下载的 bin 需要设置在PATH env