Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
182 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
  Q1 \7 \0 A4 O1 U' ?更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
. c% N8 K  |( e4 S, ?7 ]
7 g# F* ^! m( p) {
就是设置会稍微麻烦一些。
& N6 g: J& H7 P  H% L步骤 1:安装调试插件
9 j9 b8 P9 O: i3 h  k& y# t4 tVS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。% L+ L6 W) K2 t& }$ o
" g5 B3 @6 h. r+ \( B4 y
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。  _: r' n7 \3 @4 o& ]: W% t

# W" {8 u( K  D  G4 b( d步骤2:配置
4 u2 j  x( u/ x4 L  ?1 n/ g- U2 O调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
& \9 w. |7 |$ E, J! W: I. z0 e* @% @/ `+ |4 v  Y$ @: L
配置VS code配置文件:! e5 a6 C6 {$ R+ G2 B, P
  1. {/ y) J% {3 U9 ~+ q' E, t) \: S
  2.     // Use IntelliSense to learn about possible attributes.
    $ ]7 H1 b- I3 _* l7 J
  3.     // Hover to view descriptions of existing attributes.
    . ~) e8 X9 m3 W% u: _: U. t5 p$ J
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    2 W% U. P7 k1 ]7 r. ]) o
  5.     "version": "0.2.0",
    % Y( v1 q: f  L9 d& F5 W
  6.     "configurations": [9 H- q( u- n' H5 r! p
  7.         {3 \/ p. [4 |2 y+ O) t
  8.             "name": "(gdb) Launch",- j" g' c& P" @( p! e
  9.             "type": "cppdbg",
    ' H2 w9 h0 S! y9 E. M
  10.             "request": "launch",
    . b( d- g% j$ a0 N2 ]. M8 W: b& j
  11.             "program": "${workspaceFolder}/src/bitcoind",  Z: b4 ~' N# l0 A
  12.             "args": ["-regtest"],: W. {) T9 A# X* S4 A' `
  13.             "stopAtEntry": false,! `' ?3 r8 k$ v" i! f7 {
  14.             "cwd": "${workspaceFolder}",
    " [& W& l5 w1 ?0 N. e# E
  15.             "environment": [],3 k: B% ]- V: o
  16.             "externalConsole": true,
    3 V8 W- O+ A9 H6 a
  17.             "MIMode": "gdb",- U7 S& a8 a; W! W) w
  18.             "setupCommands": [
    / j- |1 K* ~: j. _8 @
  19.                 {
    % j4 T/ s6 f4 ~& e5 C; m
  20.                     "description": "Enable pretty-printing for gdb",% M: l5 h1 q; |& o
  21.                     "text": "-enable-pretty-printing",
    % L6 l0 N, F: _5 d7 H# x/ P3 H
  22.                     "ignoreFailures": true" W. o1 o5 z" q- o1 K
  23.                 }) C( [/ b4 m% u: @* [: t
  24.             ]" A9 g5 i3 u: K- z+ v2 F9 K
  25.         }
    $ T3 E# @/ a8 i" b% q7 [
  26.     ]
    3 a8 h4 y2 z  i! M+ w8 j) `
  27. }
复制代码

3 ]" P. Z" E7 D5 _' r配置文件的路径为 ./vscode/launch.json# H% @/ N/ A1 v
json文件中各个参数的含义:) E2 _. w7 g( }/ v( B
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置* G4 c3 s3 k# h6 f1 o7 k
# E. R+ r! [) n$ T6 Y6 D
步骤 3:编译
& E$ R8 S/ L* ^" r6 u2 ~/ O调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].* O3 y% K/ M1 N
bitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:- R7 [9 d  _7 i; x
    cd bitcoin/
7 u2 n3 S  o7 g) F    ./autogen.sh
% q3 ^, I: l7 F8 u    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug+ E) i: D3 m! z7 A( l
    make check! w' l: y- l7 |5 D% ?0 Z9 f4 A& t
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。. [- N8 S2 D* [2 M" d
步骤四:开始调试6 `! T4 b0 n: u- N# f
点击行号左侧设置断点:/ E( F2 W$ A2 q# ?" N

) P+ W7 t0 Z7 b; D9 v( t9 u点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:7 V1 l1 W( t- F, {6 r4 e% U/ R
& {; L3 S9 ~/ e$ B2 D
点击屏幕上方的 step into 运行下一步:* x( R  S# Z" ]* _$ @* J! f( j
9 `7 u5 L- v! c6 X

4 G- V- i  X0 J20190526更新:% S: v# @1 L" g+ R2 m4 Q
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
3 S; D7 g, o! Z8 b" Sarch -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! y0 U" |# H! X- U9 r% b4 Q
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
" ]6 O, X- O8 _4 L6 |+ C9 W+ p0 Q8 K' H- ^6 s7 {1 [3 I

3 l. E) ~$ T: n3 }( ^
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13