Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
820 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:1 t9 l% v) T2 z) X
更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
# _: H+ T9 B( \# l" e! h
9 r* L2 ]2 i2 O! [( ?, M0 o: \
就是设置会稍微麻烦一些。5 o" E, N" Z& c1 n1 |, u- \
步骤 1:安装调试插件* R0 B9 E0 A! i+ X# q. v8 Z
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。
1 y' R  D) N  R' w4 c9 T7 n5 W  R6 R# H  `
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。% I" N; w/ {) w6 h  y1 K0 _2 n& p5 D
8 l0 |6 u5 _0 t( m, B
步骤2:配置3 H7 Z1 J  }$ a6 C5 e
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
6 n+ }. [7 Y: \7 n
" c! K4 t6 I6 u配置VS code配置文件:
* }) t) w1 |' @& \1 M8 J5 F
  1. {* W. `6 A/ \* L& B
  2.     // Use IntelliSense to learn about possible attributes.
    & `, o' Q+ D0 m: ?
  3.     // Hover to view descriptions of existing attributes.
    8 P) x7 W; z  }( K' G# ~
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    3 A/ G: R1 C6 Y  Y2 b) N
  5.     "version": "0.2.0",
    ( g& s. c1 y2 Q5 ?# A2 j, L
  6.     "configurations": [
    ) ~' t2 u: A$ N+ k1 f6 r$ W
  7.         {" d4 T% ~+ H& M2 T. F3 Z/ M
  8.             "name": "(gdb) Launch",; @# b) q3 Z: @' @2 g. z5 d
  9.             "type": "cppdbg",4 X( Y6 u$ C+ Q5 D( _8 E& K
  10.             "request": "launch",% d4 [% g9 Z# e3 `- |5 z* ]
  11.             "program": "${workspaceFolder}/src/bitcoind",0 a6 `3 i7 w/ T" S
  12.             "args": ["-regtest"],) w" z, s: S: @1 v' K( x
  13.             "stopAtEntry": false,' }, G# |$ }8 p" K
  14.             "cwd": "${workspaceFolder}",
    9 Z" J% H$ d) h1 y4 a* y
  15.             "environment": [],3 Q$ |( X' X. M# P# I
  16.             "externalConsole": true,! ]+ i& x: u" p$ ~" s- X" f
  17.             "MIMode": "gdb",
    $ m6 w' e* }/ \- o; U5 \% N
  18.             "setupCommands": [
      l) O: L- Y  e) z
  19.                 {
    . L( O3 B0 X2 O9 Z* x" T: C
  20.                     "description": "Enable pretty-printing for gdb",) U6 r7 i8 S$ ]  M
  21.                     "text": "-enable-pretty-printing",( o5 O; n0 _9 _2 ?' j2 U4 k
  22.                     "ignoreFailures": true
    ' p$ R/ }3 \1 y* N9 `
  23.                 }
    , U8 N  B) c2 L! G, m+ l+ _
  24.             ]
    ( ?- r* F' U1 D$ C. u
  25.         }: b. {  M  ?- p$ f/ b
  26.     ]/ x: O# S8 e- P- m1 @
  27. }
复制代码

( _# j: _5 I3 O9 W) C4 s配置文件的路径为 ./vscode/launch.json, {) w8 `. d' s. P: Z5 r: s
json文件中各个参数的含义:* Z8 u2 w: S8 b$ [) v" p
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
# U; S" {) |6 i

) S6 Y: ^3 U: o+ A% r步骤 3:编译
+ s2 `8 Q. U4 [! J4 u& X& X调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
5 a" \# i4 u& ?: ~7 T: }) n6 Mbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:  C( m+ ~, S  r& T; s1 M  l* u
    cd bitcoin/. f7 H6 x/ I# W* _/ P3 [5 c
    ./autogen.sh1 w, P$ {. A  d9 [
    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
5 ^- Z5 l4 n# N4 u% U4 @    make check
+ N- L; c2 ^  |0 U; n& b由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。
' ~' p  f- T" O) M8 k- V% b2 ^步骤四:开始调试
" _% A: k* b  r点击行号左侧设置断点:" M* Y4 a% m! D1 V( |
, c$ P, u" |) l: |. r1 K
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:" s5 u; Q$ R* g* k" Z% H& J5 v
, c3 f; ]1 {/ e6 O1 U2 @
点击屏幕上方的 step into 运行下一步:9 @3 X8 u. O) F  @

( I& z9 Z2 j; S- W5 w; ~
; w- q$ E+ Q0 Z: K& |' i20190526更新:
$ U. I; t5 H4 f& v. }0 Z- KmacOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
* d7 e  o) c: W. Larch -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; p9 G( G  N. d# g* ?4 D& S0 I
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
  {/ n7 T, z1 z% x- R9 s: B3 {9 m$ A- o# n1 ^/ L& u: Q, V) m
" b4 W: b& k3 N
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13