Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
342 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
$ L: q/ Z/ H) n# k$ ^0 r. L更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
# `. V6 m6 p% E5 J9 D( Z1 z! ]5 i

3 \% |+ M+ L8 J* M) ~就是设置会稍微麻烦一些。% v! S: C' R; K2 [- L% I3 v- N7 p
步骤 1:安装调试插件
: C& t8 z" Z: u9 ~VS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。3 J+ E8 W; {, R

) ]0 g( ~2 D' L, V! _) B搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。- M$ x( ~: b. o8 Z0 G  _

/ Z; i3 m6 ^% _$ V! G' c步骤2:配置: c1 W$ |2 l* k, p1 m8 ^* [
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:! J+ P: s$ W4 G
8 U  D, s; _- i3 @  s
配置VS code配置文件:
! u2 }* _/ K( n5 L
  1. {& V+ {" X) b. D9 T7 ~" n* a
  2.     // Use IntelliSense to learn about possible attributes.8 l  ], [- l3 _7 A- n' h
  3.     // Hover to view descriptions of existing attributes.4 i1 e7 W5 X. t6 t
  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 G$ q7 O+ Z8 B" @4 C
  5.     "version": "0.2.0",
    3 o! V( H: l* r( J- S
  6.     "configurations": [6 B; \5 Z4 H9 F1 o0 Y
  7.         {% r8 L5 @/ c$ P# T  n6 {
  8.             "name": "(gdb) Launch",
    4 G% n7 P5 ~$ F
  9.             "type": "cppdbg",
    : ]9 ?7 C0 G8 {  O' m, D- I$ r/ V& l# v
  10.             "request": "launch",1 V' J4 t8 N/ r* M" x1 `
  11.             "program": "${workspaceFolder}/src/bitcoind",3 O, j8 H1 M# `8 d, j  V6 B
  12.             "args": ["-regtest"]," q- P7 ^# {3 S3 B* o0 \0 {
  13.             "stopAtEntry": false,
    " C2 j6 @! F5 z$ M1 K$ V
  14.             "cwd": "${workspaceFolder}",
    ; `; X! e! Q: k1 W: v9 e/ T# N
  15.             "environment": [],8 P  v; Y& M. w" A- X% \* n% e
  16.             "externalConsole": true,& B5 h+ v; R3 c7 B5 m% [
  17.             "MIMode": "gdb",4 j( R  g; h9 o
  18.             "setupCommands": [
    1 f* L4 L3 S: b+ l4 X7 T# N. P
  19.                 {
    4 U- V: S+ q' ]0 _( }; L
  20.                     "description": "Enable pretty-printing for gdb",$ ?& e6 D6 ], a9 J' n3 [
  21.                     "text": "-enable-pretty-printing",5 p% |! t  ^( O7 l- `
  22.                     "ignoreFailures": true8 T: g# m/ d' m' J8 K+ a* H
  23.                 }0 y2 X% Z( V9 B9 v
  24.             ]/ z4 a8 y: C% v8 {7 T  K1 ~
  25.         }- I, w4 s7 g1 S. u
  26.     ]3 L1 Z; U; r: m0 L4 ]2 S
  27. }
复制代码

/ g% \# y; T' @- r! D$ V配置文件的路径为 ./vscode/launch.json
+ O- E; E6 z4 c* J! @json文件中各个参数的含义:
: j8 d, A( c; O6 u7 b# cprogram:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置
2 V& l% O/ x6 [0 w8 J- o  p

; y. C3 P& s6 x5 B$ C步骤 3:编译
  ]3 ^$ m% ~: \  I3 p调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
; H- Z) s8 C$ Z# d- [  ?' ubitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:
1 j) T( h+ w3 a' ^% g. ^9 j, k, @- p    cd bitcoin/
6 J, D* ~6 T1 h. i    ./autogen.sh
! j1 g. L. K/ c    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug" x0 ]) u% s) n
    make check
" r* q7 w* |2 K# D由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。( M; Y, b7 v. A
步骤四:开始调试
! q/ M1 q4 B, H) P; V9 B% V点击行号左侧设置断点:
8 Z/ g4 T( w  o+ l- q0 T5 q9 W$ o/ U# X, v
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:* N# v* Y3 c$ Z! [/ q9 ~4 U
4 ^1 u  @/ L( m1 ~/ @7 `
点击屏幕上方的 step into 运行下一步:0 B# s6 i8 o1 @  _& T) ]' w

$ k: N4 w& K; z7 ?$ M4 B* F: q
: `4 M8 N. s8 ]5 Z  D) ?: {( z( t20190526更新:
: u& T" _1 g8 g' L( N# WmacOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
8 X3 M+ T2 R+ S$ f. w* d; b' Uarch -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, U$ p: v& L$ S5 }) ]4 N6 B这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。
* h( ?3 ~4 @: O! m# u/ M5 h' j( c- v$ y
, [2 N% h7 l- T. w6 w8 n. u
" X3 ^8 y7 f: M$ W1 p
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13