更方便的监测变量值变化更方便的翻阅当前执行代码所在文件* }7 j/ {* T; k e+ B) o
就是设置会稍微麻烦一些。9 v' x( e) D% v a* Q, M
步骤 1:安装调试插件
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。5 w$ j- ?3 ~4 G7 c& F
) j8 T# M2 Q) n" S, Y5 S( X
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。
) Y: y, z; R: G
步骤2:配置
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
配置VS code配置文件:% U2 M4 h3 l3 S# `: q
- {
- // Use IntelliSense to learn about possible attributes.# O+ }/ Y: f) @1 Z- s
- // 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",
- "configurations": [1 {5 g: Y( \1 M
- {
- "name": "(gdb) Launch",& A" B! e; o$ B, ^ ]
- "type": "cppdbg",
- "request": "launch",
- "program": "${workspaceFolder}/src/bitcoind",* {4 j* y$ i0 E* x
- "args": ["-regtest"],# A H! K! y- r2 J/ f3 ?
- "stopAtEntry": false,
- "cwd": "${workspaceFolder}",! f, O7 V- u' } l
- "environment": [],
- "externalConsole": true,
- "MIMode": "gdb"," m0 }6 X3 m8 j& q% P i
- "setupCommands": [
- {& o/ C2 s! Y' z6 A
- "description": "Enable pretty-printing for gdb",% r& n8 P! B' q. Y
- "text": "-enable-pretty-printing",
- "ignoreFailures": true$ G, Q- V( ?* @1 \+ N0 Y
- }
- ]
- }( Q& b; ]% j; r/ v1 ?0 K: n- t
- ]9 h: J# S& z6 ^+ [. x2 k
- }
配置文件的路径为 ./vscode/launch.json8 V( k& R5 }* F
json文件中各个参数的含义:2 h5 E$ K$ t2 l% k( Y( ?( a
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置) b! E) T, P% }( y/ Z. y9 h# B; Q
步骤 3:编译
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:0 V/ D5 z3 r0 {' x
cd bitcoin/
./autogen.sh" W4 z0 y; L: Z( B7 i' X8 P
./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug$ H8 ?4 z3 x5 O" }7 g2 ~
make check- E0 Y- v$ @( h" H; Q; j1 L
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。0 S3 r2 j8 M: O
步骤四:开始调试2 p; E. Q0 Q3 h" E
点击行号左侧设置断点:& B/ w$ [2 j& K& J0 f! l
. w0 l/ X% B* r# ^1 R c' k% c
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:
) I0 }! E: w, h! N }9 E
点击屏幕上方的 step into 运行下一步:
20190526更新:
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:8 f1 I7 |0 @" X& q* f1 ^; Q; ?- d9 {
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 $? ; exit9 B' ]4 X6 q, I5 X A# ]
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。; K5 p$ q5 Z J6 n