Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
340 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
6 d, w2 ~3 n4 c2 W+ v9 _更方便的监测变量值变化更方便的翻阅当前执行代码所在文件( c6 N  L6 s) y

# W$ f, p- y) D就是设置会稍微麻烦一些。4 x* C9 S/ B, Z% @
步骤 1:安装调试插件/ a/ W& l: n- O3 x6 B
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。
: Q! {! ]! N7 y5 l7 u9 f6 y8 }, X/ K! j9 w8 K! T* M
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。
7 B3 V( Q& d; ~& E3 y4 m
$ _, J8 e5 |# l4 O7 a/ k$ z步骤2:配置" [: l9 F9 V, P3 V
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
" g$ `+ }' D. K5 K7 O1 s# b/ ]
' P- C2 j# ?6 a( F配置VS code配置文件:* r7 ~5 f+ n8 M/ y4 k2 l8 I
  1. {8 _, _$ W% m( E! R8 u# T! u
  2.     // Use IntelliSense to learn about possible attributes.
      \* r7 U: I8 d4 O: d
  3.     // Hover to view descriptions of existing attributes.
    ' H$ }4 {* g- y' E, r$ x0 N
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>* T" H$ [+ V& ~' _' x
  5.     "version": "0.2.0",1 [- `. G( ~4 {" ~! g% A
  6.     "configurations": [
    " a3 d  |0 ?9 j
  7.         {
    " w1 W' z( A$ u1 ]: o) A
  8.             "name": "(gdb) Launch",
    4 ~. G* b6 Z# a- M; c" J6 d! b
  9.             "type": "cppdbg",
    ' w, |2 y" b5 [! S
  10.             "request": "launch",9 q- q8 t1 }1 q. t! I
  11.             "program": "${workspaceFolder}/src/bitcoind",1 P9 M1 v% ^- p6 L$ i- I
  12.             "args": ["-regtest"],2 _# p7 I: J. t2 z9 S
  13.             "stopAtEntry": false,3 P; z8 {6 z* I  S( {+ Z7 j
  14.             "cwd": "${workspaceFolder}",
    # t# x+ B3 @# Z
  15.             "environment": [],
    4 _% T( {2 U' R9 M$ v
  16.             "externalConsole": true,7 a5 h* R& V$ {: E" J
  17.             "MIMode": "gdb",. B7 Q+ k+ E3 s9 J3 S) m
  18.             "setupCommands": [7 v6 `! U7 p6 G0 ]. p& c, p4 }
  19.                 {( k; l: a& l. x
  20.                     "description": "Enable pretty-printing for gdb",/ ?* v; R4 O0 ^/ n' X
  21.                     "text": "-enable-pretty-printing",
    $ Z% x, w3 v* H
  22.                     "ignoreFailures": true
    ! y& Y5 X) Z5 e3 w! N0 [
  23.                 }
    1 I% b  O% a5 j6 d& Q5 U, d4 J
  24.             ]
    5 E% u4 @+ i+ u0 j6 w5 }
  25.         }9 T8 w7 |1 w) v+ O+ @
  26.     ]
    0 E/ a' F: _8 ~& `, F. F  C
  27. }
复制代码

/ `! n2 H6 e; g( Q8 d8 [, n8 R配置文件的路径为 ./vscode/launch.json
5 \) _2 z+ y( w, w) w/ Ujson文件中各个参数的含义:" }" `" X3 t, e* W1 \) _
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
( L$ x$ h5 b# s( p
- _3 ~8 o+ |/ O4 T9 ~7 m! m
步骤 3:编译
) b& G  P: \3 G2 Y. K* b调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
/ r6 D/ e" p3 v9 D7 zbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:: v: k- j5 {( C5 f/ m; ~
    cd bitcoin/5 t! d$ j. s1 c0 y  ]( P
    ./autogen.sh- L* O5 [# b/ E
    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
& i' h! i: E' v  D    make check7 I9 F& z. s5 Y) D$ M
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。
& Q# X9 t; a) |: A/ i1 P. s步骤四:开始调试
2 \9 Y$ D8 W; y, t9 N' G% d点击行号左侧设置断点:$ z( @7 t& N9 _- J5 F' k. p/ {/ E

% N/ p2 I5 |$ p5 n3 {. F0 h" K' {点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:5 K! G$ _3 H1 c6 T" U9 C* |' z' B

" Z6 s% C. `8 M$ G! s8 U) I点击屏幕上方的 step into 运行下一步:
- r+ K9 z9 L* c! ]* h9 K' v# |9 |
6 c$ V( A) h6 l4 M; P
" C* H8 {0 l7 e0 S* c: {2 L- Q6 o20190526更新:& M# D/ \$ d# j+ Y7 K: Z! _
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:0 x6 N" o5 Y/ ^0 F- u) ~
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
  V6 ~/ a5 N  e这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。9 M- L! y; j# @3 \8 Q" x4 @9 i

( \4 t% |4 S5 o2 F: J
! m/ Q0 A3 `1 ?) U2 K5 ^
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13