更方便的监测变量值变化更方便的翻阅当前执行代码所在文件# z+ V% x& o( V4 [
( E- G6 j% h7 u; U
就是设置会稍微麻烦一些。
步骤 1:安装调试插件; _( h) Q) a$ @9 x
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。
& {: Q; E( G, N, H, }6 v W
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。3 S8 W8 ]; c7 S+ P
步骤2:配置
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:2 E* ]% X5 I. ^
& g4 \3 x$ W! x& _0 Q. Z
配置VS code配置文件:
- {- p) Q5 P6 _* J1 S2 y i
- // Use IntelliSense to learn about possible attributes.7 M: F$ ?, X% n# [; ~$ N
- // Hover to view descriptions of existing attributes.8 C* T9 o- q9 s: U; o" B7 M+ T$ k' ^
- // 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": [* a. q# }4 [& F }( N
- {
- "name": "(gdb) Launch",# _0 [" H$ O+ l! [) ~$ N% c; k
- "type": "cppdbg",
- "request": "launch",* x2 r% o: V1 @& {
- "program": "${workspaceFolder}/src/bitcoind",
- "args": ["-regtest"],- N# t( g0 f4 h0 y1 s4 U; ~2 _
- "stopAtEntry": false,
- "cwd": "${workspaceFolder}",2 k! V, ^; d7 E1 r
- "environment": [],
- "externalConsole": true,
- "MIMode": "gdb",* W& r/ c0 @( e4 _4 O2 h
- "setupCommands": [; c9 l% a6 D$ B
- {
- "description": "Enable pretty-printing for gdb",2 i. p2 F4 M u) h7 T
- "text": "-enable-pretty-printing",# [+ y4 r$ d& j m! K; x
- "ignoreFailures": true1 @1 H3 c2 y' v% P$ [+ a
- }7 k" k" @$ J& Y7 {
- ]0 V+ k2 Z' |# E: J. a0 R/ Z
- }& K- I, d4 |5 X( h
- ]
- }
配置文件的路径为 ./vscode/launch.json9 w' h5 h5 c0 G$ ^
json文件中各个参数的含义:
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置& w8 k/ {5 H9 }' a+ R' V7 y
步骤 3:编译- i- e$ X# ]/ P6 A7 z" R2 j( X
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:2 H- p" u1 S: V# C E# R
cd bitcoin/+ T( O( R5 `6 m* e& a. l
./autogen.sh
./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug9 |4 U3 \: Y* J* D. ~- R
make check1 r( l' @% s0 }7 {- Q; O
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。
步骤四:开始调试3 a' y' `8 \2 K
点击行号左侧设置断点:
# S) t) {* J) {8 y m P/ d
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:2 Z. c3 Y, z! ]" U6 L7 F
点击屏幕上方的 step into 运行下一步:0 u0 x1 l# X' A9 M$ m A0 Z- c
K6 U$ e7 P$ u3 M/ f2 q
20190526更新:9 J4 M8 @# U" s+ @
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
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。% I% Q- u. V& V' p' {3 {: h