Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
446 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
# F* B! x6 X. |更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
9 H0 }3 J0 ?0 G5 {

" |0 U) [, f0 ]* c7 K( G就是设置会稍微麻烦一些。
2 T+ S3 M6 D+ i7 _$ w8 k步骤 1:安装调试插件
' B  ^$ _+ c2 \" z0 v' yVS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。- P7 i  [' z* u; ]- M$ m; k+ Q

8 |+ [6 S5 |) b( x$ [搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。% S. d3 u; Q4 k& u& u+ _
# j. x- ?8 l4 n8 X9 j5 ~
步骤2:配置
' _, @6 L  f/ I; W3 ]0 J8 T+ H) w- A调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
. l! v$ E. H3 M* y/ e
5 m4 \9 e0 f* {配置VS code配置文件:
0 ?: h: K( }  m4 |+ f. f
  1. {1 I# C0 R, |6 S. s  e
  2.     // Use IntelliSense to learn about possible attributes.
    6 f; [# W( H; T& q" r0 ^
  3.     // Hover to view descriptions of existing attributes.
    ' S6 n" Y" b0 r6 ~! ?8 Y# o0 d
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    7 C4 r; p% y" d$ _' A
  5.     "version": "0.2.0",4 _* a' _0 r* T6 l! m. `8 \
  6.     "configurations": [+ u) p; T* C; p5 K/ y* r8 n
  7.         {6 _! _+ T4 t8 N, l4 N& t6 p
  8.             "name": "(gdb) Launch",5 z  p* o/ {* I* N  x
  9.             "type": "cppdbg",
    1 O( ?# l' c1 ^" P, x
  10.             "request": "launch",
    $ c4 {$ R! v8 i$ {! T6 X
  11.             "program": "${workspaceFolder}/src/bitcoind",
    " x" ]. ]* [5 z; x7 x1 k; y! x
  12.             "args": ["-regtest"],
    $ S4 b! z# ~$ V2 Y$ w  ~, E
  13.             "stopAtEntry": false,4 I% X" V. o" c' N
  14.             "cwd": "${workspaceFolder}",
    8 o! g7 \, N( @8 G% F
  15.             "environment": [],
    : v0 F: b3 ~5 B
  16.             "externalConsole": true,% Y( `3 ^% x) Q: ]+ O# }$ d
  17.             "MIMode": "gdb",: N9 F" G) X( T' S4 M; j5 P0 M' l
  18.             "setupCommands": [: U! w8 G7 ~' _* [. Z
  19.                 {
    & \8 y0 f1 M$ c  g% o# x$ S
  20.                     "description": "Enable pretty-printing for gdb",
    3 J6 h# Y. `  \9 b/ v
  21.                     "text": "-enable-pretty-printing",5 H; R% b% |+ t; g; |/ w; s
  22.                     "ignoreFailures": true; _3 Q) d1 S( g  o; r6 ]9 @
  23.                 }5 P; b* o4 f) ^! Y) v
  24.             ]8 H; ^( [" b) ~4 G7 I# ~- B
  25.         }' `6 f* e+ l) G8 ?: h% j% N8 ~
  26.     ]% p3 ~/ P5 e  R! C$ U
  27. }
复制代码

* u5 d' v% N5 L9 L9 ~配置文件的路径为 ./vscode/launch.json
" l; s8 P) k( R6 N4 H5 cjson文件中各个参数的含义:
+ _( u) G8 ^% k+ p# z! S+ n9 K1 {program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置9 I1 ^& [2 ]" H- g% P

4 Q2 t8 y2 N4 }. T! W" f& o步骤 3:编译# [3 A8 b1 }/ q2 h5 ~
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].  A. o  x5 z4 p/ ?0 U
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:; p4 C7 O  N3 ]0 W
    cd bitcoin/' ?3 @$ E2 k) |7 V2 l/ |! Z8 W
    ./autogen.sh
: f2 y, z8 }$ u3 k: F' H* b    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug: t4 l. r" m3 W; m
    make check
" x- R& ^6 l+ _由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。, V$ K& G* I0 z# z3 u* D# D
步骤四:开始调试- a# U1 a- {; e8 Y+ g6 q
点击行号左侧设置断点:, O  f" L/ e* [' i0 F' i% ~

1 n6 {' g$ _" z/ m/ C$ X& U点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:
% N) T4 w: `* ^9 P7 Z9 T' |/ @9 W: }4 _5 g% E1 r) S
点击屏幕上方的 step into 运行下一步:
9 E; {! x; P. R2 C& k
  g) X' t2 R# J- n* a% \
6 N! |. A- h8 v! H3 \; C$ s: K20190526更新:; C* Z& i2 h0 h$ v4 I+ S' K  b1 y% a
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:1 Y; u- i' r1 o3 Y& }
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. i8 V" ~; e0 W9 \- `4 L  q/ q6 N7 ~
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
2 ^% W3 r$ \9 v" Y7 [
5 E& t+ ~9 Y; U' l) O1 u9 V& x1 Q  h  G2 F4 M5 a$ L6 @8 Z, X
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13