更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
就是设置会稍微麻烦一些。
步骤 1:安装调试插件
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。% ~. h- w, }8 U9 [
3 Z% k0 w: w9 x2 d! u% s, f
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。+ {* W' j: K1 L
( N# O. Q4 M, \5 p2 z7 J B
步骤2:配置/ b( o# i. W5 b8 W
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
配置VS code配置文件:$ T% ~# S, ^+ L$ I3 a% ^# ~- w, F
- {" l5 v* }' n, {0 `1 s9 \
- // Use IntelliSense to learn about possible attributes.3 ]2 \4 n7 h1 n' r, @
- // Hover to view descriptions of existing attributes.
- // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
- "version": "0.2.0"," [4 i6 I! |" a7 A! H
- "configurations": [
- {; U3 U, m @( R4 y5 E. p4 W
- "name": "(gdb) Launch",+ a0 e) F& g) {- x* O6 ?& W. u
- "type": "cppdbg",6 L6 i, l5 k, A x1 s
- "request": "launch",! t0 B7 T9 O8 X( o8 o
- "program": "${workspaceFolder}/src/bitcoind"," ~' _* q+ i* P5 Q: H) I! T
- "args": ["-regtest"],+ ^9 h( j5 e& S5 Y
- "stopAtEntry": false,8 W, K. e) H) w) j5 q
- "cwd": "${workspaceFolder}",
- "environment": [],- m* q/ N3 t0 d/ n
- "externalConsole": true,
- "MIMode": "gdb",
- "setupCommands": [+ `/ s0 s$ i9 J, v4 X$ g
- {
- "description": "Enable pretty-printing for gdb",. q& R; k' |6 D2 y/ }% x
- "text": "-enable-pretty-printing",
- "ignoreFailures": true2 h1 n9 Y& v) H4 P1 C. o& h
- }
- ]
- }
- ]+ H) s) O1 E4 u- M
- }
配置文件的路径为 ./vscode/launch.json! ?* Y% \7 ~7 F' v
json文件中各个参数的含义:( C1 I) L6 Z( d9 u
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
2 x6 E- |' j: j, k" L8 T( x8 w) I# g
步骤 3:编译
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:
cd bitcoin/2 G2 g2 h- K! X+ i3 q1 `5 q3 p
./autogen.sh
./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
make check
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。# Q+ h/ w G2 \4 Y+ T/ O7 e
步骤四:开始调试
点击行号左侧设置断点:( b& {! Y( v& E% ^& L
. {% _6 P8 s8 s7 y
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:9 D8 J$ y9 {3 r/ Y8 G
. W2 _ ]$ H6 M6 l& V& n
点击屏幕上方的 step into 运行下一步:' q: b! c& S j
$ }1 ^3 G v8 }2 F4 U
20190526更新:9 v( v9 V# W6 n1 R+ W0 [
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:' n3 j; B7 ~! I) l" H; w6 R, v
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 $? ; exit3 _' J5 o. B/ x: p
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。3 x. }& ~' }8 s, L' V8 J