Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
695 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
8 ?/ \7 a: f) T# t+ f; I' r- k" s! j更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
) e! Q$ P0 k: @) i9 e7 s, n

/ x, x* Y8 _9 R/ L8 [$ U就是设置会稍微麻烦一些。& m  K9 N5 w. O! u% T1 Y
步骤 1:安装调试插件' G2 p+ w& o8 u3 W( P8 s
VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。- x0 d6 x1 l, X+ ~+ k

# t- h1 ~) F) M! B+ y) w0 F搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。! {; O7 d3 _: q8 Z( M

9 u& r7 }1 N% h' V步骤2:配置
9 P; v; X4 E4 s! j- Z- T调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:1 c. n' d; q/ V9 f
3 o4 M  ?9 i/ |8 P
配置VS code配置文件:
0 e) D! B( h6 a5 o" k
  1. {
    - d8 k" j9 h6 P* ]9 |
  2.     // Use IntelliSense to learn about possible attributes.
    6 w) K0 ?1 {. k" f* H9 x
  3.     // Hover to view descriptions of existing attributes./ L5 O. R. I7 e+ {  @9 D1 E" G/ u5 [9 r
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    - L: M6 m4 B' s3 L5 ?) X8 A6 \
  5.     "version": "0.2.0",1 H2 @% }& J# l9 [$ p$ D9 T
  6.     "configurations": [
    , x* |' M9 a& I
  7.         {0 m4 s! e, c8 u$ \; ?: {$ Z  ^
  8.             "name": "(gdb) Launch",
    # i; ^0 f: [9 R  \
  9.             "type": "cppdbg"," I# K& k$ \* ]8 Q/ X. Q
  10.             "request": "launch",
    1 \) O1 s4 @" I3 e5 n- J
  11.             "program": "${workspaceFolder}/src/bitcoind",
    5 N  Q1 ^  g5 {9 B
  12.             "args": ["-regtest"],8 K  p- ]# s" m: ^' ]3 G1 Z0 P
  13.             "stopAtEntry": false,
    ' u- t( v& ]# p: O+ ^, l  }0 r
  14.             "cwd": "${workspaceFolder}",
    % }- \& u0 D4 x1 n+ E" K) N
  15.             "environment": [],
    7 D8 D- g( ^1 X4 M6 c; ?  J
  16.             "externalConsole": true,
    9 B4 B5 S9 ], m$ N9 ~! {
  17.             "MIMode": "gdb",
    ' j: s, u4 ^# x3 e* ~/ i6 {" b. r; `& Q
  18.             "setupCommands": [
    " E4 G7 }; G( b+ ?# w. v
  19.                 {
    " w! f9 B8 y$ e: ~! t
  20.                     "description": "Enable pretty-printing for gdb",6 f% R, i" C! G+ G- o
  21.                     "text": "-enable-pretty-printing",
    ! v( h# Z9 L( N" V* m/ f% N
  22.                     "ignoreFailures": true
    4 N; ^/ Y( B: S* q2 O% S6 l- o
  23.                 }
    % s0 {) q4 g0 W6 c' b7 U+ l$ Z
  24.             ]
    7 o5 h" ?# F" f! Q8 q$ V" G: |
  25.         }
    : k4 o1 ]# _5 `
  26.     ]' w7 }8 |; I- I5 V6 M
  27. }
复制代码
5 {* n- x! A5 `1 n! T
配置文件的路径为 ./vscode/launch.json
3 C& T2 u! f7 q+ e* ]& ]json文件中各个参数的含义:
/ {& }# \3 }: nprogram:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置8 u8 h) l& ]8 ^  j0 Z

' y& \2 ~, K6 `/ n! k步骤 3:编译
- v! N7 U& G9 X" u0 f6 s8 C调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
+ T- W7 s# `! u- \6 [" [1 `bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:& @! ^- I8 l5 i) L! `
    cd bitcoin/; A5 N9 K+ q  O+ `7 k, _
    ./autogen.sh$ H& d: \" O9 Z0 }* T) H
    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug9 P, h# J2 D' E/ e/ v
    make check4 _0 p# I( \& }! \  L* y: p4 B9 r6 W
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。
3 V4 Y  N! t' [9 L# E$ W$ L步骤四:开始调试# t" |; }1 Q/ j; }0 K( g
点击行号左侧设置断点:) a, J9 P& ~: Q4 J( R- a6 y
) i- v% q* K6 i  c# T
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:1 ~7 ~5 H' q8 j6 A& ^6 Y" d3 w2 E
9 l  `2 X' q: g% y
点击屏幕上方的 step into 运行下一步:
2 f' J6 D" b) J: ?; d
) B7 ~$ r$ O5 I  I5 R  U/ m& s! A1 ^) J) q
20190526更新:
  M& U* b' i$ r7 W- AmacOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
6 ^7 K, P6 Z! _3 w6 barch -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- [; a0 B6 G7 ^+ d# r3 G
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
9 @5 |0 p" g* {
/ K( M1 q, C. D* Q& v- K: Y* g  B% W. P1 M
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13