更方便的监测变量值变化更方便的翻阅当前执行代码所在文件# i' ?, [5 }3 X D/ _
3 X/ }2 y# [5 ?& }: Z
就是设置会稍微麻烦一些。
步骤 1:安装调试插件
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。" U* k7 t. G; n; `1 V+ T
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。
步骤2:配置/ N& E& ?7 r4 v: t
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
2 ?+ z5 I$ O r; N4 f' Y% D# ?
配置VS code配置文件:
- {
- // Use IntelliSense to learn about possible attributes.
- // Hover to view descriptions of existing attributes.8 J6 D! F- V5 @7 J- i) L
- // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>1 G0 u2 }! i: `
- "version": "0.2.0",% k3 }% L6 ~$ w; x- y
- "configurations": [) A, t8 P6 L c# K; x
- {
- "name": "(gdb) Launch",6 [9 E6 V3 w& W9 q' I
- "type": "cppdbg",
- "request": "launch",
- "program": "${workspaceFolder}/src/bitcoind",, A& [) Z5 k- Q3 j: {% W
- "args": ["-regtest"],8 g3 o0 @' V6 W' ~; N, m
- "stopAtEntry": false,
- "cwd": "${workspaceFolder}",
- "environment": [],* R! \6 P) t) k7 K- r
- "externalConsole": true,# m8 X# S; i$ G0 m2 e
- "MIMode": "gdb",
- "setupCommands": [
- {
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",: p: A+ e8 J1 ` N( c
- "ignoreFailures": true f7 Z8 B* |" ~. Y8 |% A
- }, e/ r# B9 k8 Z3 G% [8 ?' `/ t
- ]7 s# T: j# ^2 Y8 h/ c7 }+ v
- }
- ]2 d6 r$ f4 [" n+ F5 h- P! |( |& {. D
- }
配置文件的路径为 ./vscode/launch.json
json文件中各个参数的含义:
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
步骤 3:编译8 t8 G/ j, L! b" P
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].$ G5 g6 k( r- ]- ]
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:$ Z2 h0 g) u, P2 n0 [6 B. ~4 W
cd bitcoin/
./autogen.sh
./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
make check
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。) }, [; F& j3 y0 A
步骤四:开始调试
点击行号左侧设置断点:' g& ?) m7 i. f1 O7 ?
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:
点击屏幕上方的 step into 运行下一步:# W+ A- Y/ K% i" u
_) e- F$ F; z. H- ]& Q" {" V4 ]( L
20190526更新:
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:6 t% f. `$ `. h- [* s4 K0 Q
arch -arch x86_64 '/Users/yushengzhou/.vscode/extensions/ms-vscode.cpptools-0.23.1/debugAdapters/lldb/bin/lldb-launcher' --unix-socket=/tmp/61Ab3Q --arch=x86_64 --working-dir '/Users/yushengzhou/code/bitcoin' --disable-aslr -- '/Users/yushengzhou/code/bitcoin/src/bitcoind' '' ; echo Process exited with status $? ; exit
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
3 Y/ j, I0 J: u2 p0 g: `. H4 u
. k2 R9 n, f: m' S/ K: r& u5 g. s