Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
821 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
) X, n0 r2 N7 [/ o3 |4 l+ w( p( G更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
- ~0 ~: T+ a- p5 N% a4 D- j# b

! B% O: l% Q$ c, }/ W& {: {7 Q就是设置会稍微麻烦一些。( S5 X* e  k+ {6 k/ r) f
步骤 1:安装调试插件
. u5 q6 v1 r# e! W8 P/ mVS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。
( E: \  W# |+ u3 ]2 N- m" [/ M+ j' V* J  ~& q8 H
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。! n/ d2 S# y7 @. `8 u) e

: j5 ?+ V1 m6 |; Q! p步骤2:配置# G. w; M; F, x- d2 [9 B7 a  L
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
$ C, N2 m! ^& N; y
$ }2 |. D0 [4 r8 y$ C配置VS code配置文件:/ y! y5 Z6 i$ l* D
  1. {( K; i4 @+ c$ ]: a7 r! s* i- F+ G: Z
  2.     // Use IntelliSense to learn about possible attributes.6 w$ _. D# M# i8 `, L, }# `+ `
  3.     // Hover to view descriptions of existing attributes.
    9 s( t7 y. W! z, q) c& u  E  j
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    ) w% Q, w, y  R$ [% w; K5 [
  5.     "version": "0.2.0",
    # V2 f  T5 x6 x! `1 R; b% n. L
  6.     "configurations": [
    & ]3 s" R' D# t! b. A( d9 a5 A8 y
  7.         {. Q. b( L# X  i5 E
  8.             "name": "(gdb) Launch",7 u, u4 _% O0 T, q0 ^
  9.             "type": "cppdbg",2 g* R; l8 s( N# p$ F; R/ S5 [# ~
  10.             "request": "launch",* e+ ?2 H5 l  n6 V6 `* s
  11.             "program": "${workspaceFolder}/src/bitcoind",1 s# B( U, `3 c
  12.             "args": ["-regtest"],+ L4 n2 _9 P- |( m( ]$ k, k
  13.             "stopAtEntry": false,
    ) m3 H9 R3 [% V! J$ \% T7 f
  14.             "cwd": "${workspaceFolder}",
    8 x' i' M4 t1 S& m1 S
  15.             "environment": [],
    : @$ ^7 o$ Y# g
  16.             "externalConsole": true,& u% e! Y) g, R+ A
  17.             "MIMode": "gdb",
    + \0 J, l$ v" x3 [, ?
  18.             "setupCommands": [
    ! O) [, S+ w/ `: }0 N) Z, m4 P
  19.                 {/ Z7 R# h" ~) k9 M5 R
  20.                     "description": "Enable pretty-printing for gdb",4 Z9 A) Z2 I. W; j+ M; b
  21.                     "text": "-enable-pretty-printing",
      p7 a6 O5 W( }
  22.                     "ignoreFailures": true; J+ ~2 @! _! W9 _
  23.                 }
    ) g* O) \1 F: k! D0 A
  24.             ]
    . S* d# Y6 g4 Q
  25.         }
    ' O0 r! Y, O- p: o
  26.     ]3 @6 f. J0 L$ d) d7 b; K6 A
  27. }
复制代码

+ B& N& {' ^9 W+ X配置文件的路径为 ./vscode/launch.json
6 B+ o; W7 r/ }0 K: l% ?. _; djson文件中各个参数的含义:& Q# [) Q5 F% F1 H; R- B- N, h, {
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
% ?- e" d4 V4 U) ^

7 \! \+ s  A# b' m& F1 I8 C步骤 3:编译
* u9 O& N9 u; L' \5 A0 p调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
- L, U7 z$ Y9 F' P, Abitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:  c7 [2 J" O5 J$ Y8 ^
    cd bitcoin/) s) z9 ]  e6 P$ _5 E9 D! P
    ./autogen.sh
% ]9 e: x6 l8 U7 u6 B$ i    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
  q6 G9 D2 q+ L7 ]+ d    make check4 i1 J% v. d8 q9 T7 P
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。9 S: V0 a: \' W. c; f& r; U: g
步骤四:开始调试
5 Z* Y+ n1 T0 o5 g$ K7 U点击行号左侧设置断点:$ ~+ R7 G8 R& J: `- r5 @

! y' _7 ?0 E" k, E2 U点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:& t% `7 y* m: `% X1 _. }
: U6 v, [6 L. c
点击屏幕上方的 step into 运行下一步:) J0 k) l5 z( v% {( n' K

& V, W: a0 h1 D, A1 E! o' w" O
! e) x/ ^7 K1 F! I( S3 }" N20190526更新:
6 ]# D. H' X# O( }& r! ZmacOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
! v# S* ?7 L" K# z  }7 aarch -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
( i" A1 o* i" s) E# O5 e这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。! Q7 }" e+ N2 V0 p1 D- P' p6 ^

  ]. @  N# B0 f$ k% n6 W" A( Q. D$ D7 [) R  X* x- ~- I9 w2 G( I& w
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13