Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
849 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:) v. F$ P3 p6 V. r0 Q
更方便的监测变量值变化更方便的翻阅当前执行代码所在文件* }7 j/ {* T; k  e+ B) o

2 P# |: }& F! O) M) a  C: i就是设置会稍微麻烦一些。9 v' x( e) D% v  a* Q, M
步骤 1:安装调试插件
4 g; b1 d4 [' t& cVS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。5 w$ j- ?3 ~4 G7 c& F
) j8 T# M2 Q) n" S, Y5 S( X
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。
" F) Q  ?, x! o" m) Y: y, z; R: G
步骤2:配置
, Z8 F: P  y6 a/ K. e调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
, k! ?$ C; u: F0 P% g
) S) \: a6 B9 X: a配置VS code配置文件:% U2 M4 h3 l3 S# `: q
  1. {
    , D! ^/ x, _1 t# s+ P
  2.     // Use IntelliSense to learn about possible attributes.# O+ }/ Y: f) @1 Z- s
  3.     // Hover to view descriptions of existing attributes.
    ' a+ _4 H7 Y6 l1 k) j4 Z- W
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    2 T* ^8 h5 n* g6 W' j
  5.     "version": "0.2.0",
    , G/ `. l. H2 Z* Y, M
  6.     "configurations": [1 {5 g: Y( \1 M
  7.         {
    + S% E" @# o9 m8 F0 [6 b  ~
  8.             "name": "(gdb) Launch",& A" B! e; o$ B, ^  ]
  9.             "type": "cppdbg",
    ( N; |. D6 F- r# `: @! |3 {: K
  10.             "request": "launch",
    4 r& M5 S. f  a  w9 N
  11.             "program": "${workspaceFolder}/src/bitcoind",* {4 j* y$ i0 E* x
  12.             "args": ["-regtest"],# A  H! K! y- r2 J/ f3 ?
  13.             "stopAtEntry": false,
    4 T% J  d; c0 F; X1 f4 r
  14.             "cwd": "${workspaceFolder}",! f, O7 V- u' }  l
  15.             "environment": [],
    , V. t- L  c& t# z# P7 {# J% G
  16.             "externalConsole": true,
    6 e' S4 W# ?. r: u% q( l# k
  17.             "MIMode": "gdb"," m0 }6 X3 m8 j& q% P  i
  18.             "setupCommands": [
    $ y5 W9 n+ q1 ~( v' J" y$ O
  19.                 {& o/ C2 s! Y' z6 A
  20.                     "description": "Enable pretty-printing for gdb",% r& n8 P! B' q. Y
  21.                     "text": "-enable-pretty-printing",
    6 A, C: d% a! k9 @; V/ D+ s1 U% e+ J
  22.                     "ignoreFailures": true$ G, Q- V( ?* @1 \+ N0 Y
  23.                 }
    # H3 s; n; C# Z+ ]7 }: X4 F: o2 ~% t
  24.             ]
    ( w! e: r2 G: P5 H
  25.         }( Q& b; ]% j; r/ v1 ?0 K: n- t
  26.     ]9 h: J# S& z6 ^+ [. x2 k
  27. }
复制代码

! t4 D" T# s4 R) V. l! B配置文件的路径为 ./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

5 ]' m; X2 G7 r# N步骤 3:编译
% M4 O' a& @# V" r2 u) q, R2 Z6 g( o调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
( ~) E0 Q% e# F/ P, Wbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:0 V/ D5 z3 r0 {' x
    cd bitcoin/
; Q/ [% y3 U3 Q2 J    ./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 快捷键,开始调试:
* u: |9 _. A8 A: p  f( j) I0 }! E: w, h! N  }9 E
点击屏幕上方的 step into 运行下一步:
+ a- f8 e% k% }+ Y
/ L$ E( F( T9 w4 f7 K
& n+ Y8 e& M2 W$ Q20190526更新:
: y8 i( _  D) [: K9 umacOS 环境下编译成功了,只是执行失败了。原因是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

- r2 s6 y4 }1 Q' V  ?8 C# N
! H$ A6 Y2 B$ }( E; D; l
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13