Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
346 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
6 w7 e5 k  `% a( b. D* i更方便的监测变量值变化更方便的翻阅当前执行代码所在文件$ p6 g3 E+ g* G0 e2 J+ u
# u% t% E0 J4 b, {. z6 w$ T( I
就是设置会稍微麻烦一些。
% Q' ^4 e& @* N步骤 1:安装调试插件0 r# [  u. k& r, T
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。: r7 ?; O+ i: k: v
* Q0 v( Q/ p2 C4 W6 }0 o9 O7 J
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。4 i' L- r1 d! f9 [9 Q" E9 u
1 ~0 ~4 T5 y$ q: A! [/ @  t
步骤2:配置8 F# q0 t* Q: j; A: ]) r2 N* u8 Y
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:% \% z* Y8 E3 ?. Y

+ y. v4 \# x. [; B配置VS code配置文件:
  n+ O0 r- h( V& U' @+ P, `
  1. {
    3 @9 W' C* t# N9 x/ p' n
  2.     // Use IntelliSense to learn about possible attributes.
    1 J- K/ k9 X: @, |8 A3 Z3 O7 M
  3.     // Hover to view descriptions of existing attributes.7 t3 t$ X9 d% Q% {4 `
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>8 z. {4 V' `% q
  5.     "version": "0.2.0",
    * A. |( n6 g: T8 O
  6.     "configurations": [% c( q+ W: a  r$ P5 T' y5 M; S
  7.         {9 K  ~7 I3 @5 J5 t, k
  8.             "name": "(gdb) Launch",
    / S: \  a# R. E8 _3 V0 F, R
  9.             "type": "cppdbg",
    . r5 F/ J) _0 F% l
  10.             "request": "launch",; k; I7 M" e( Q& {* H5 p8 D5 Z6 l3 l
  11.             "program": "${workspaceFolder}/src/bitcoind",
    ! R& a# c) V5 C
  12.             "args": ["-regtest"],
    + l7 q4 j5 q: C* g
  13.             "stopAtEntry": false,
    $ {  @: B* d; O7 ~0 w2 s
  14.             "cwd": "${workspaceFolder}",  M+ h( Q7 T# s5 D) g
  15.             "environment": [],
    . |  S$ z) x! S* D7 k; M3 b
  16.             "externalConsole": true,
    % V' k8 [  k" A- e: w  J
  17.             "MIMode": "gdb",
    & f5 {% O3 L; y
  18.             "setupCommands": [
    - E- ^3 w7 a' }0 }, j+ l* l! p
  19.                 {: h0 N. d/ M5 a
  20.                     "description": "Enable pretty-printing for gdb",
    5 W! Y' w& l" @0 A+ ?# z
  21.                     "text": "-enable-pretty-printing",
    ; Y2 q* R1 G, f, o8 U2 L& O
  22.                     "ignoreFailures": true/ K% y- O6 H  f' ~0 k
  23.                 }2 u" i6 E6 G5 k* [
  24.             ]
    : D6 ~3 p8 G/ a- e' x: B8 G/ X6 Q
  25.         }5 |  b2 o7 \, |: L" j
  26.     ]
    9 F* n  N6 O1 j- f6 F9 D0 ?% V
  27. }
复制代码
  @6 N& B- B# m( U* U
配置文件的路径为 ./vscode/launch.json
- r. K7 [& A3 `json文件中各个参数的含义:5 E' b- U6 Y& v9 ~: ~  W; [4 J" a- z
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
* P) h6 P# s# G1 I; w

* X: O+ z1 w( a* ], w步骤 3:编译
, _5 I5 o* B4 J; Q/ F: M: R调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
2 J4 r2 q% Q, E/ [0 Wbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:
( X5 ^* z" I3 E# I4 L' M$ |    cd bitcoin/# D7 ~& k9 s8 m$ f/ `% E+ I" F
    ./autogen.sh
: D3 i3 h8 F  @6 D1 Y    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
1 W% \. h( T- `8 D# T    make check
: j3 i' J/ E  s* z5 d7 U由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。+ C# f2 a: L+ p7 Z
步骤四:开始调试- e; U* }! M+ [
点击行号左侧设置断点:
& h' a4 L8 A5 P( ]
" |1 r0 M& V: V+ s/ X6 K0 o点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:
; U$ f0 _3 i! i2 S% l- c
4 j8 r# g7 D" q1 \3 g' r0 \! g点击屏幕上方的 step into 运行下一步:
7 N! l6 b5 J2 e
- ^2 n  e4 f% T3 F7 y! n1 J& t
1 r; E, _: G: G1 [2 o20190526更新:) J: \; X! S# B
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
$ _- W1 l. Y' S3 r4 u& K. Carch -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( C2 R) U, C7 R: e. y# z
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
% R" |+ K% |2 f0 t( k0 g7 n! G
# I+ U9 Y9 a& {- O% n: D( D5 n! U' F$ M
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13