Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
822 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:# f0 K" f: @+ A$ G; U
更方便的监测变量值变化更方便的翻阅当前执行代码所在文件& C$ t2 v: M7 f( ]5 y$ D' N% \0 @3 P
/ [* ?+ l( l' G" T
就是设置会稍微麻烦一些。6 X; t0 s7 K$ o+ h( l/ |
步骤 1:安装调试插件' v( C# _% Q+ I
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。9 ~  B. `4 S, _7 T0 u
  Z% }/ i; U4 \! S
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。
- @3 ^% z9 z! F6 [( x* R9 ^: U3 x' E1 Q0 c
步骤2:配置
0 m# n# T; X' h- [* y5 D调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:5 ]5 b) _4 w" ~/ K5 X3 \  M. ?1 z, K

% `: t: \/ d- Y. |8 o- H' r配置VS code配置文件:8 D, G; z4 x2 d: J5 W& e2 {" X
  1. {
    1 g2 o  @1 T. _+ m5 d2 k8 }6 s
  2.     // Use IntelliSense to learn about possible attributes.. Y6 [3 ?2 S2 F* A& S7 T$ \8 y
  3.     // Hover to view descriptions of existing attributes., z) w5 h; E2 G, b- f- b
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>; s9 Q5 n  P6 J
  5.     "version": "0.2.0",
    ! I9 Z, I) ~' B7 L) O3 g8 `0 p4 s
  6.     "configurations": [
    / P5 D2 q: m+ ^# f% b7 f
  7.         {2 ]3 @% Z: f5 {/ R8 M' {
  8.             "name": "(gdb) Launch",
    * F) C: v$ c# r+ r
  9.             "type": "cppdbg",
    9 X6 l8 ]. |- ]+ x  a
  10.             "request": "launch",
    5 F# P; W: }  B2 }
  11.             "program": "${workspaceFolder}/src/bitcoind",+ Q' p' v# P, e; s
  12.             "args": ["-regtest"],) E. {' [1 V1 P, V. ?# ?
  13.             "stopAtEntry": false,. ~1 E5 M. J5 U% ~9 b( w
  14.             "cwd": "${workspaceFolder}",0 Q8 X7 c! z1 b
  15.             "environment": [],6 p% F  x  v( f' \
  16.             "externalConsole": true,
    9 G6 X4 i! L* L: T
  17.             "MIMode": "gdb",7 n# _6 |6 N. f. E+ G# X* [
  18.             "setupCommands": [
    9 T8 `1 J  f* K( v6 a5 m0 t
  19.                 {
    ) Z1 x0 A6 U' K0 y
  20.                     "description": "Enable pretty-printing for gdb",
    ' g5 \  p2 Z& U/ X+ d8 f$ y
  21.                     "text": "-enable-pretty-printing",1 Z7 j, M' V  ]
  22.                     "ignoreFailures": true
    3 _9 M: G( ]. C, Y
  23.                 }
    ! u$ V% c& K7 Z5 U. Q5 K. y; Z: L6 H
  24.             ]' o$ d) _: o2 Q) R
  25.         }
    3 d- u4 ^2 W2 V: Q0 {8 }/ A9 ?7 _
  26.     ]
    7 T2 {5 u- r% P
  27. }
复制代码

. A4 K) E- t; H0 n3 u' o# m( d% A配置文件的路径为 ./vscode/launch.json+ x! i8 {6 Z: U/ J* J2 W  c% q
json文件中各个参数的含义:
8 m# n* U5 I! X4 C# T4 Jprogram:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
1 _! ^% n) W* _& j' D4 j
6 v% n1 a/ R% u- y' b0 i
步骤 3:编译
; i$ ]& q( C7 X% Z. P% U调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
( j' [. y2 Z% a/ n' s4 Kbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:' }0 ?# j+ k2 I' b# L- y! V
    cd bitcoin/1 N7 R8 C& y( l- d  Y! j
    ./autogen.sh) n- ?1 [- E+ F
    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
; X" t! U: `% }4 T% U$ r5 b" b( B    make check8 b& v- n6 i: C0 l4 W
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。
5 z2 [" J# G. b. F步骤四:开始调试
/ d) Z9 e8 o+ K" v8 K点击行号左侧设置断点:
! r) L5 B# [. l( F- z7 V, g* x* c8 }
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:7 X5 W6 _9 T6 r* A

7 I" ]' z# N3 X  J点击屏幕上方的 step into 运行下一步:9 s) f( d4 x$ k" ^  y/ A
4 q* f! n: Z2 ^

0 A- }8 N" u- A, D3 s6 e; {9 y2 L20190526更新:
; X! `0 o* ~. M. qmacOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:1 m$ n4 L9 x5 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
# |: \5 O& a9 o- ?这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。2 K  N6 k# T5 E$ ?
1 h/ |# G* D9 }, v/ J3 x9 h
0 R: z9 {/ Y4 M+ `  Z3 e) s$ C3 F; ?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13