Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
371 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:7 D3 B( s4 d3 R, c" Q- b2 B) v
更方便的监测变量值变化更方便的翻阅当前执行代码所在文件) W% @& J: t6 _- d, @4 b
; `: D7 s9 u$ O+ |5 W/ Y$ u) x: q
就是设置会稍微麻烦一些。/ y! u! p; B6 {4 F
步骤 1:安装调试插件: R! B; ^1 a* b
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。$ q/ f0 y* b  u* L9 R% t

0 R% ]6 n2 F% a搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。- L. j# x- S' E# J4 o( l2 K) W8 t

2 i* ^8 m4 S/ V; ]1 ?步骤2:配置
# l* s0 r9 @/ t; B9 B8 @" I8 l% A3 c调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:) c  S) o6 F( f4 p8 X) n- s
7 P' r/ u; B  S/ W& H+ T9 d
配置VS code配置文件:' C% x1 o4 Q$ l: q$ v
  1. {
    ; i% c3 h+ l8 ~: q' {# ?* `+ _
  2.     // Use IntelliSense to learn about possible attributes.. ^/ V* r9 L, }9 d
  3.     // Hover to view descriptions of existing attributes.; I3 |$ B0 g. ^. ^" D6 @2 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>0 L: ?3 Q0 M9 }$ _0 P6 U
  5.     "version": "0.2.0",5 ^7 \! [" `! F7 ]& e! J
  6.     "configurations": [, \1 ?" H& b) r' o) }
  7.         {
    0 x4 ]- E8 R6 g0 L/ o/ _9 u
  8.             "name": "(gdb) Launch",
    & u- j: S2 @& }# R2 m
  9.             "type": "cppdbg",
    & Q! @4 Q$ b1 _* d3 t, \9 Q3 p
  10.             "request": "launch",% f# X2 P$ y# _" Y2 ]6 G3 ]8 J0 N2 G/ a
  11.             "program": "${workspaceFolder}/src/bitcoind",2 b" A0 b$ u/ {2 ]
  12.             "args": ["-regtest"],5 W3 p8 w' S* s- L
  13.             "stopAtEntry": false,
    / I2 U9 K% w2 n- n
  14.             "cwd": "${workspaceFolder}",
    ) e1 o4 s8 ?  Y5 p( s
  15.             "environment": [],
    2 P' Y; c" x/ i6 n1 Q' _
  16.             "externalConsole": true,6 X- B9 q3 c$ ~
  17.             "MIMode": "gdb",
    0 x  `9 b5 l5 k. k9 T
  18.             "setupCommands": [' I9 C* w/ L5 G' E+ f: P( F" L, ~
  19.                 {
    . }+ _2 Z! v) c0 p- A
  20.                     "description": "Enable pretty-printing for gdb",. U9 b% p' F3 }" J/ z/ B/ y
  21.                     "text": "-enable-pretty-printing",
    7 b; {' [: j5 S$ t$ k
  22.                     "ignoreFailures": true
    ( V0 l+ c1 O$ Y; G/ j- H& p
  23.                 }
    2 w6 }! s' u4 |' o
  24.             ]
    . j5 J% c. K' I& u* U9 H+ N- e$ S
  25.         }
    2 g5 ~, Q- u( V' J( h3 S
  26.     ]
    4 P, }+ P- n( j; s
  27. }
复制代码
/ R0 z0 l0 c; h1 Z5 N7 v8 v, q* J
配置文件的路径为 ./vscode/launch.json
7 Z5 r2 R! |7 \: r  yjson文件中各个参数的含义:
2 H, o& N& Q+ W- Q$ V1 Jprogram:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
% O9 @" h" h8 Z5 O+ x5 E3 h% n& p0 `) H

2 w$ |  f  v& ~步骤 3:编译# ]$ r/ }$ e/ y5 I
调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].0 x' P( G. ~( }9 S" Q, t8 t/ r1 k7 L
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:  p: `2 e5 c! d, E
    cd bitcoin/$ `& R2 o' s% ~% ]) p; ~) H
    ./autogen.sh
2 w4 |8 {# Z- w) ]8 @6 v$ A    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
7 O7 C8 d( e- C% ^    make check
9 o) d1 H8 }! `( m' O由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。- t' Y9 E0 f+ A1 F
步骤四:开始调试  Z6 V: \9 N4 J+ T8 x+ _
点击行号左侧设置断点:
& |$ M" M" v: t# q# |2 r. Q# Z
) w: o  c, B: T& Z& n( t8 Z: |' N& P) T点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:) H. K# Y6 A1 l! J- U" O0 u5 A! s
3 R( o' d* ~) F" m" e6 ^9 t7 R
点击屏幕上方的 step into 运行下一步:$ e4 P2 ~1 j* G9 Q
5 C: L3 j( a5 |4 X/ ^
; _7 h+ r7 x% X. ]( F9 j
20190526更新:. W0 n; D) e. ^& ]" z. t
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:& G3 [6 Q9 H7 k( X
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" H' o# P. a% s& A6 o! C$ r! T, Y( O
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。) `8 O8 K: ~% M
& M) E6 D5 _% Q& m

3 f, G, I: k( G+ U! W4 u* z
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13