Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
339 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
0 L5 A3 Z4 F, T  k更方便的监测变量值变化更方便的翻阅当前执行代码所在文件# i' ?, [5 }3 X  D/ _
3 X/ }2 y# [5 ?& }: Z
就是设置会稍微麻烦一些。
  l' A, m* l& G" V1 ?6 a步骤 1:安装调试插件
0 r9 B/ ^# l4 [1 A: OVS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。" U* k7 t. G; n; `1 V+ T

5 n$ V! U/ {% `5 ]5 L8 z9 F, G搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。
, ?. Z) l4 B7 z8 u8 E. e) Q% X
1 F& l* I* `+ H步骤2:配置/ N& E& ?7 r4 v: t
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
" [. a7 ~9 H; S! q$ l2 p! o4 I2 ?+ z5 I$ O  r; N4 f' Y% D# ?
配置VS code配置文件:
% S. l( z( v9 z0 z4 S* ^& r$ }
  1. {
    ) N! {. V" ?% g9 b2 N9 n
  2.     // Use IntelliSense to learn about possible attributes.
    6 P& C! f& c1 y# l
  3.     // Hover to view descriptions of existing attributes.8 J6 D! F- V5 @7 J- i) L
  4.     // 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: `
  5.     "version": "0.2.0",% k3 }% L6 ~$ w; x- y
  6.     "configurations": [) A, t8 P6 L  c# K; x
  7.         {
    . m. T& O3 \- ^, ~  \) C) M4 Z1 _2 g
  8.             "name": "(gdb) Launch",6 [9 E6 V3 w& W9 q' I
  9.             "type": "cppdbg",
    / k, Q+ H2 T  K6 K; L
  10.             "request": "launch",
    ) _; U$ O1 C9 @  e6 }2 E
  11.             "program": "${workspaceFolder}/src/bitcoind",, A& [) Z5 k- Q3 j: {% W
  12.             "args": ["-regtest"],8 g3 o0 @' V6 W' ~; N, m
  13.             "stopAtEntry": false,
    % i2 i& p5 d3 a- g: ^- W
  14.             "cwd": "${workspaceFolder}",
    ! w, H) r4 c. v0 t* ?& \# X
  15.             "environment": [],* R! \6 P) t) k7 K- r
  16.             "externalConsole": true,# m8 X# S; i$ G0 m2 e
  17.             "MIMode": "gdb",
    ( X7 V: g/ V2 t! a; E& p( ^
  18.             "setupCommands": [
    7 ~2 ^3 Y+ }1 s8 H0 ^$ `7 o
  19.                 {
    % w: U. {: w/ w7 D9 \1 D) o0 k
  20.                     "description": "Enable pretty-printing for gdb",
    * ]- h% `5 j! [" ^
  21.                     "text": "-enable-pretty-printing",: p: A+ e8 J1 `  N( c
  22.                     "ignoreFailures": true  f7 Z8 B* |" ~. Y8 |% A
  23.                 }, e/ r# B9 k8 Z3 G% [8 ?' `/ t
  24.             ]7 s# T: j# ^2 Y8 h/ c7 }+ v
  25.         }
    6 e! ^9 M2 y9 U( q& L$ L
  26.     ]2 d6 r$ f4 [" n+ F5 h- P! |( |& {. D
  27. }
复制代码

$ C4 P& Y8 Y1 `% H+ c配置文件的路径为 ./vscode/launch.json
* }; d# y0 m/ N8 ^4 ~4 Ojson文件中各个参数的含义:
4 Y$ ^2 ~. E8 C# `! _program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
& b( h) m' s: {1 V# X/ S

9 v* T! h2 j$ j  S& ]步骤 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/
1 m3 T! K+ f; A& O4 S  B    ./autogen.sh
% I7 }4 X; I7 e9 ]  }8 k; l% ?    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
. h, w1 _9 U: X0 N! E- N    make check
% t5 k# V3 y$ b. s* @) V由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。) }, [; F& j3 y0 A
步骤四:开始调试
* q2 z8 v' Q4 V" p7 z点击行号左侧设置断点:' g& ?) m7 i. f1 O7 ?

, u, Q" S2 ], H/ x! k点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:
, }) I& n/ ^8 J$ L9 i
2 v# k4 S9 n& Y1 W$ y点击屏幕上方的 step into 运行下一步:# W+ A- Y/ K% i" u

* r" T& K# l& F; [8 F  _) e- F$ F; z. H- ]& Q" {" V4 ]( L
20190526更新:
* h6 I1 a+ \: t6 y7 [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
. Z6 L+ [( Q# }# I8 u: D这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
/ l) E9 @- [, `/ i3 Y/ j, I0 J: u2 p0 g: `. H4 u
. k2 R9 n, f: m' S/ K: r& u5 g. s
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13