Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

VS code 调试 bitcoin core

华胥
832 0 0
使用 VS code 调试代码相比原生的gdb调试代码会带来一些好处:
+ X. r4 _8 `: {更方便的监测变量值变化更方便的翻阅当前执行代码所在文件
, ^6 f- O/ b; R6 D2 o' h
3 L6 n  X: ?' S# `
就是设置会稍微麻烦一些。
( r6 g( P  l) {2 Y- m4 u0 [" Z步骤 1:安装调试插件
* ]5 _9 [4 d+ V. BVS code 默认只支持 node.js 语言的调试,其他语言的调试需要安装插件。
& t  y. Z, R. K, u6 z3 s; t( a) b$ L" m) N
搜索 C++,安装插件。不过要注意的是,插件本身并不具备编译、调试的能力,需要另外使用软件进行编译、调试[1]。- l0 f7 s  h$ I( R

) J! }- p$ W3 V# z) p步骤2:配置. l: p3 Z5 W6 Z! j7 f
调试前需要手动配置launch.json文件指定调试入口,点击 Open Configurations开始配置:
: x0 q: Q% O+ u% ]
) t- p* e( b) e, T! @, B5 N( q/ n6 k配置VS code配置文件:8 j# G& L% f  [" ]5 d" |1 V; Y& c
  1. {
    0 U! M* }1 l3 A6 c
  2.     // Use IntelliSense to learn about possible attributes.
    , @6 T8 c2 C& z: ~& |, C
  3.     // Hover to view descriptions of existing attributes.
    9 N1 P; Y& I7 j! 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>
    5 b6 P8 {, f7 }1 S+ S8 n
  5.     "version": "0.2.0",
    5 ]( O' X4 h$ U: u5 @: _' z
  6.     "configurations": [
    6 z. W( L8 l% S; j
  7.         {2 g9 {6 K1 @- \: r
  8.             "name": "(gdb) Launch",
    2 {( G% k9 c7 ?$ a' r
  9.             "type": "cppdbg",4 {, }$ F( G8 W
  10.             "request": "launch",
    & ^: v! X7 s" {- j
  11.             "program": "${workspaceFolder}/src/bitcoind",
    ( Q8 E' D, ?4 J; |7 `* Y
  12.             "args": ["-regtest"],, M( p9 j7 Y1 F
  13.             "stopAtEntry": false,
    2 ~4 Q: c; j) v( |) g
  14.             "cwd": "${workspaceFolder}",
    , |/ Y* v/ ?' n0 q! P, X. W
  15.             "environment": [],
    ; {* D4 t, X5 z+ j& L& A, L
  16.             "externalConsole": true,; B: l/ i  p& {/ Z
  17.             "MIMode": "gdb",1 Y$ ^% R5 c; C
  18.             "setupCommands": [
    - \& K& M, P, m. P
  19.                 {3 g" D/ m! x3 x! k: C
  20.                     "description": "Enable pretty-printing for gdb",
    1 {* r8 d$ v. W8 Q9 _5 j
  21.                     "text": "-enable-pretty-printing",, h- n" f! R# K9 M( K9 U, Z! B
  22.                     "ignoreFailures": true' b1 f1 d# c# s, D4 W, J
  23.                 }% U1 d5 ]2 ?) X
  24.             ]& a3 k* n. K# ~6 ]0 I( ?# ~: f
  25.         }
    ' ^7 d) B5 o/ b) f, L
  26.     ]1 j4 S* M' L% ~. u
  27. }
复制代码

) a3 `, b+ Q; n配置文件的路径为 ./vscode/launch.json! B: g% _/ W6 l; h" U, Y9 m6 s2 M! m- J
json文件中各个参数的含义:/ z; D# x: r7 M, d5 A; l
program:程序编译后得到的可执行文件,即调试的入口args:可执行文件的参数,以上图中指定-regtest为例name: 配置的名称,在左侧调试框可以选择使用哪个配置3 G: S) O6 D( {( J2 M

6 j% ^0 g* r# n! ^步骤 3:编译
* a! a6 }7 Q* m0 {  T6 Q调试前需要先将程序编译到上述设置的指定位置,可以在命令行启动编译。也可以通过配置.vscode/tasks.json文件设置任务,在 VS code 内启动编译程序[2][3].
3 n! `2 r3 ]. d3 C  a" lbitcoin core 的编译命令[4],注意添加给 configure 添加参数 --enable-debug[5]:2 x4 K" T3 A4 v/ `" Z
    cd bitcoin/, Y4 a# s, p: d
    ./autogen.sh
& \/ n8 t& @0 a+ a' }9 E4 D" I1 N    ./configure --disable-wallet --without-gui --without-miniupnpc --enable-debug% {7 l* w3 K- T5 @" y
    make check0 c1 R" W$ C  i7 E' }
由于在 macOS 环境下编译失败,在 Debian 环境下编译成功了,下面以 Debian 环境示范。: W/ j& p! }; L$ ^$ g
步骤四:开始调试8 s% @+ Q$ K) D
点击行号左侧设置断点:
9 V; p' z$ a& W0 J6 y* B. Q4 x' n. o8 k( @- o" d
点击左侧调试工具栏的“开始”按钮,或者按 F5 快捷键,开始调试:# ], U8 ?2 ~+ E5 W1 {7 e, L' N! q+ _7 f
9 D( y3 e1 v1 W" J! Y
点击屏幕上方的 step into 运行下一步:
2 D) [6 |6 D/ u' ^1 o9 H) Z/ o. x5 D$ ^/ S
8 I& a5 ]. I* N7 ~% M& ~
20190526更新:
/ t+ g4 x. @& H9 A0 _8 y/ S5 xmacOS 环境下编译成功了,只是执行失败了。原因是vscode 调试时会在 shell 运行命令:
4 `2 l& ~0 ]' R* l1 Warch -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, d8 `1 p0 d' D$ K& U* t) {
这个用的是 bash 的语法,而我默认用的是 shell 是 fish。因为语法的不兼容而造成运行失败,只需要将 shell 换成 bash 即可。0 V$ p6 o& a* T5 B& u' E
; Z# k9 f/ f) t- s' Z) Y  |
. q9 X, }( l8 P) l$ a
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13