更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
3 L6 n X: ?' S# `
就是设置会稍微麻烦一些。
步骤 1:安装调试插件
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。
( a) b$ L" m) N
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。- l0 f7 s h$ I( R
步骤2:配置. l: p3 Z5 W6 Z! j7 f
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
配置VS code配置文件:8 j# G& L% f [" ]5 d" |1 V; Y& c
- {
- // Use IntelliSense to learn about possible attributes.
- // 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": [
- {2 g9 {6 K1 @- \: r
- "name": "(gdb) Launch",
- "type": "cppdbg",4 {, }$ F( G8 W
- "request": "launch",
- "program": "${workspaceFolder}/src/bitcoind",
- "args": ["-regtest"],, M( p9 j7 Y1 F
- "stopAtEntry": false,
- "cwd": "${workspaceFolder}",
- "environment": [],
- "externalConsole": true,; B: l/ i p& {/ Z
- "MIMode": "gdb",1 Y$ ^% R5 c; C
- "setupCommands": [
- {3 g" D/ m! x3 x! k: C
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",, h- n" f! R# K9 M( K9 U, Z! B
- "ignoreFailures": true' b1 f1 d# c# s, D4 W, J
- }% U1 d5 ]2 ?) X
- ]& a3 k* n. K# ~6 ]0 I( ?# ~: f
- }
- ]1 j4 S* M' L% ~. u
- }
配置文件的路径为 ./vscode/launch.json! B: g% _/ W6 l; h" U, Y9 m6 s2 M! m- J
json文件中各个参数的含义:/ z; D# x: r7 M, d5 A; l
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置3 G: S) O6 D( {( J2 M
步骤 3:编译
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:2 x4 K" T3 A4 v/ `" Z
cd bitcoin/, Y4 a# s, p: d
./autogen.sh
./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug% {7 l* w3 K- T5 @" y
make check0 c1 R" W$ C i7 E' }
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。: W/ j& p! }; L$ ^$ g
步骤四:开始调试8 s% @+ Q$ K) D
点击行号左侧设置断点:
4 x' n. o8 k( @- o" d
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:# ], U8 ?2 ~+ E5 W1 {7 e, L' N! q+ _7 f
9 D( y3 e1 v1 W" J! Y
点击屏幕上方的 step into 运行下一步:
9 H) Z/ o. x5 D$ ^/ S
8 I& a5 ]. I* N7 ~% M& ~
20190526更新:
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
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, d8 `1 p0 d' D$ K& U* t) {
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。0 V$ p6 o& a* T5 B& u' E
; Z# k9 f/ f) t- s' Z) Y |
. q9 X, }( l8 P) l$ a