Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
811 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:: C1 ]' M& ^! N0 U$ q2 \
更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
7 c, J; Q6 w& @6 \+ ~

; L2 Q" g% G/ {0 q就是设置会稍微麻烦一些。
: ^$ d# i8 i+ S+ O* Q( f步骤 1:安装调试插件
2 f/ W' u' u6 z1 k4 J+ e* ^VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。% ~. h- w, }8 U9 [
3 Z% k0 w: w9 x2 d! u% s, f
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。+ {* W' j: K1 L
( N# O. Q4 M, \5 p2 z7 J  B
步骤2:配置/ b( o# i. W5 b8 W
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
& Q! C, q5 x  I7 S  L
; I0 n$ j7 b7 }3 n配置VS code配置文件:$ T% ~# S, ^+ L$ I3 a% ^# ~- w, F
  1. {" l5 v* }' n, {0 `1 s9 \
  2.     // Use IntelliSense to learn about possible attributes.3 ]2 \4 n7 h1 n' r, @
  3.     // Hover to view descriptions of existing attributes.
      V! D8 S, V8 q7 a# ]* H  k! f# i
  4.     // For more information, visit: <a href="https://go.microsoft.com/fwlink/?linkid=830387" target="_blank">https://go.microsoft.com/fwlink/?linkid=830387</a>
    ) ?3 n8 _6 q' _( V, G' P% Z% `
  5.     "version": "0.2.0"," [4 i6 I! |" a7 A! H
  6.     "configurations": [
    ) M* R  U. O5 S3 f
  7.         {; U3 U, m  @( R4 y5 E. p4 W
  8.             "name": "(gdb) Launch",+ a0 e) F& g) {- x* O6 ?& W. u
  9.             "type": "cppdbg",6 L6 i, l5 k, A  x1 s
  10.             "request": "launch",! t0 B7 T9 O8 X( o8 o
  11.             "program": "${workspaceFolder}/src/bitcoind"," ~' _* q+ i* P5 Q: H) I! T
  12.             "args": ["-regtest"],+ ^9 h( j5 e& S5 Y
  13.             "stopAtEntry": false,8 W, K. e) H) w) j5 q
  14.             "cwd": "${workspaceFolder}",
    . r2 n* j5 y3 ~* p0 a4 m4 J
  15.             "environment": [],- m* q/ N3 t0 d/ n
  16.             "externalConsole": true,
    4 ?5 ~; V6 u; x
  17.             "MIMode": "gdb",
    # K! l- o8 i4 {- Y$ A8 b+ n9 l' n
  18.             "setupCommands": [+ `/ s0 s$ i9 J, v4 X$ g
  19.                 {
    ' N& w1 \' R# V! a0 b
  20.                     "description": "Enable pretty-printing for gdb",. q& R; k' |6 D2 y/ }% x
  21.                     "text": "-enable-pretty-printing",
    2 i( _" H# s5 L* l5 s
  22.                     "ignoreFailures": true2 h1 n9 Y& v) H4 P1 C. o& h
  23.                 }
    ' O4 K! k1 H8 c9 S  w/ `
  24.             ]
    . d5 t1 `/ r3 l" X9 Q
  25.         }
    ( t9 B/ A& B. D4 _8 S3 p  d* j
  26.     ]+ H) s) O1 E4 u- M
  27. }
复制代码

- w% X1 y* n4 e# g0 t8 M' q配置文件的路径为 ./vscode/launch.json! ?* Y% \7 ~7 F' v
json文件中各个参数的含义:( C1 I) L6 Z( d9 u
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
- n. {2 ]- ^1 B+ L
2 x6 E- |' j: j, k" L8 T( x8 w) I# g
步骤 3:编译
9 S+ y* u2 `0 \调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
6 K+ q+ ~, R& r) V0 Q* P* Vbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:
& r* a3 G, E& A. p, \3 h- N7 L    cd bitcoin/2 G2 g2 h- K! X+ i3 q1 `5 q3 p
    ./autogen.sh
6 f! J% ^0 n6 _4 Z' L+ z* a1 J" z+ B    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug
; F7 z4 c, `/ J    make check
  Z$ a2 ^) V# h2 ~% X  ~/ D/ W8 {由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。# Q+ h/ w  G2 \4 Y+ T/ O7 e
步骤四:开始调试
+ ^! ~5 f) a" E' f7 m点击行号左侧设置断点:( b& {! Y( v& E% ^& L
. {% _6 P8 s8 s7 y
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:9 D8 J$ y9 {3 r/ Y8 G
. W2 _  ]$ H6 M6 l& V& n
点击屏幕上方的 step into 运行下一步:' q: b! c& S  j
$ }1 ^3 G  v8 }2 F4 U

7 w" @( @( J* o  Y/ _! ^6 c5 t20190526更新:9 v( v9 V# W6 n1 R+ W0 [
macOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:' n3 j; B7 ~! I) l" H; w6 R, v
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 $? ; exit3 _' J5 o. B/ x: p
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。3 x. }& ~' }8 s, L' V8 J

& \5 [! P, d2 @0 W8 K
9 F8 }; o9 K* \/ W* y+ i3 L7 q# Y
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13