Gỡ lỗi Bitcoin Core. GitHub Gist: chia sẻ ngay lập tức mã, ghi chú và đoạn trích.

Bạn đang xem : nhật ký gỡ lỗi cũ hiển thị giá trị bitcoin

Đã chuyển đến https://github.com/fjahr / debugging_bitcoin để cho phép cộng tác tốt hơn.

Tài liệu này hiện được tối ưu hóa cho MacOS. Nếu bạn muốn giúp đỡ
tôi thêm các lệnh tương đương của Linux, vui lòng cho tôi biết.

Gỡ lỗi Bitcoin Core

Hướng dẫn này được thiết kế để cung cấp cho những người mới bắt đầu phát triển C ++ và / hoặc những người mới
đến cơ sở mã lõi bitcoin, tổng quan về các công cụ có sẵn để gỡ lỗi
cũng như đưa ra các gợi ý về nơi các vấn đề có thể khiến bạn gặp khó khăn.

Mục lục

Mẹo chung

Trước hết, gỡ lỗi liên quan đến quá trình biên dịch, vì vậy bạn chắc chắn muốn
tăng tốc độ càng nhiều càng tốt. Tôi khuyên bạn nên xem ghi chú chung về năng suất trong
tài liệu lõi bitcoin và cài đặt ccache và tối ưu hóa cấu hình của bạn.

Cũng đừng quên tắt tối ưu hóa bằng cách sử dụng cờ -O0 , nếu không
sẽ không thể gỡ lỗi vì tên biểu tượng sẽ không thể nhận dạng được.

Ví dụ về cấu hình cờ: ./configure CXXFLAGS = "- O0 -g" CFLAGS = "- O0 -g"

Cũng lưu ý rằng hướng dẫn này đang sử dụng lldb thay vì gdb vì tôi đang chạy MacOS.
Đối với người dùng Linux, gdb dường như là tiêu chuẩn và ngay cả khi bạn đang sử dụng gdb ,
hướng dẫn vẫn sẽ phù hợp với bạn vì các công cụ rất giống nhau .

Bạn đã đến đúng chỗ chưa?

  • Mainnet / Testnet / Regtest đều có tệp debug.log của riêng chúng
  • Kiểm tra tính năng ghi nhật ký vào các tệp tạm thời được dọn dẹp trừ khi kiểm tra của bạn không thành công hoặc
    bạn chỉ định --no-cleanup

Gỡ lỗi

Chạy bitcoind

của riêng bạn

Đây là những ví dụ mà bạn đang tự tương tác với mã và không dựa vào
trong các bài kiểm tra để tái tạo lỗi.

Ghi nhật ký từ bitcoind

của riêng mình

Nói chung, bạn có thể sử dụng std :: out của mình nhưng điều này sẽ không xuất hiện trong bất kỳ nhật ký nào.
Bạn nên sử dụng LogPrintf . Chèn vào mã của bạn một dòng tương tự
ví dụ sau.

  LogPrintf ("@@@");
 

Sau đó, bạn có thể ghi lại kết quả trong tệp debug.log của mình:

  $ cat ~ / Library / Application \ Support / Bitcoin / regtest / debug.log | grep @@@
 

Ví dụ này hiển thị đường dẫn của tệp debug.log trong môi trường regtest. Nhớ lại
để thay đổi điều này nếu bạn đang đăng nhập từ testnet hoặc môi trường khác.

Nếu bạn muốn đăng nhập từ các tệp bên trong xác thực các quy tắc đồng thuận
(xem src / Makefile.am )
thì bạn sẽ gặp lỗi do thiếu tệp tiêu đề và khi bạn đã thêm những
trình liên kết sẽ phàn nàn. Tất nhiên, bạn có thể làm cho điều này thành công, nhưng tôi sẽ
khuyên bạn nên sử dụng trình gỡ lỗi trong ngữ cảnh đó.

Gỡ lỗi từ bitcoind của riêng bạn < / h4>

Bạn có thể bắt đầu bitcoind của mình bằng công cụ gỡ lỗi như lldb để gỡ lỗi
mã:

  $ lldb src / bitcoind
 

Trong bảng điều khiển lldb , bạn có thể đặt các điểm ngắt trước khi thực sự bắt đầu chạy
quy trình bitcoind sử dụng lệnh run . Sau đó, bạn có thể tương tác với bitcoind
xử lý như bạn thường làm bằng cách sử dụng bitcoin-cli .

Đang chạy thử nghiệm đơn vị

Bạn đang chạy các bài kiểm tra đơn vị được đặt tại src / test / và sử dụng thư viện BOOST
khung thử nghiệm. Chúng được thực thi bởi một tệp thực thi riêng biệt cũng được biên dịch với
làm. Nó được đặt tại src / test / test_bitcoin .

Vì vậy, các mẹo hữu ích về thực thi (điều này sử dụng thư viện Boost).

Chỉ chạy một tệp thử nghiệm: src / test / test_bitcoin --log_level = all --run_test = getarg_tests

Chỉ chạy một bài kiểm tra:
src / test / test_bitcoin --log_level = all --run_test = * / the_one_test

Ghi nhật ký từ các bài kiểm tra đơn vị

Ghi nhật ký từ các bài kiểm tra bạn cần để sử dụng khung BOOST được cung cấp các chức năng
đạt được kết quả ghi nhật ký. Một số phương pháp có sẵn, nhưng đơn giản nhất
có thể đang thêm BOOST_TEST_MESSAGE trong mã của bạn:

  BOOST_TEST_MESSAGE ("@@@");
 

Ghi nhật ký từ mã kiểm tra đơn vị

Để các câu lệnh nhật ký từ mã của bạn xuất hiện trong đầu ra kiểm tra đơn vị, bạn sẽ có
để in trực tiếp tới stderr :

  fprintf (stderr, "from the code");
 

Kiểm tra đơn vị gỡ lỗi

Bạn có thể bắt đầu mã nhị phân test_bitcoin bằng cách sử dụng lldb giống như bitcoind. Điều này cho phép bạn
để đặt các điểm ngắt ở bất kỳ đâu trong bài kiểm tra đơn vị của bạn hoặc mã và sau đó thực hiện các bài kiểm tra
bất kỳ cách nào bạn muốn bằng cách sử dụng từ khóa run theo sau là các đối số mà bạn thường làm
chuyển tới test_bitcoin khi gọi trực tiếp.

  $ lldb src / test / test_bitcoin
(lldb) target tạo "src / test / test_bitcoin"
Traceback (cuộc gọi gần đây nhất cuối cùng):
  Tệp "& lt; input & gt;", dòng 1, trong & lt; mô-đun & gt;
  Tệp "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", dòng 52, trong & lt; mô-đun & gt;
    nhập yếu tố
  Tệp "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/weakref.py", dòng 14, trong & lt; mô-đun & gt;
    từ nhập _weakref (
ImportError: không thể nhập tên _remove_dead_weakref
Tập thực thi hiện tại được đặt thành 'src / test / test_bitcoin' (x86_64).
(lldb) run --log_level = all --run_test = * / lthash_tests
 

Chạy thử nghiệm chức năng

Bạn đang chạy các bài kiểm tra nằm trong test / functions / được viết bằng python .

Ghi nhật ký từ các thử nghiệm chức năng

để gỡ lỗi cấp độ nhật ký, hãy chạy kiểm tra chức năng với --loglevel = debug .

  self.log.info ("foo")
self.log.debug ("thanh")
 

Sử dụng --tracerpc để xem kết quả đầu ra nhật ký từ RPC của các nút khác nhau đang chạy trong chức năng
kiểm tra trong std :: out.

Nếu nó không bị lỗi, hãy làm cho nó bị lỗi và sử dụng cái này:

  Kiểm tra
 

Bạn thậm chí có thể khẳng định khi ghi nhật ký thư bằng với self.nodes [0] .assert_debug_log (["lkagllksa"]): .
Tuy nhiên, không thay đổi thụt lề của các dòng kiểm tra. Chỉ cần chèn vào một nơi nào đó được thụt vào giữa def run_test
và phần thân của nó.

Ghi nhật ký từ mã kiểm tra chức năng

Sử dụng LogPrintf , như đã thấy trước đây, bạn sẽ có thể xem kết quả trong các nhật ký kết hợp.

Gỡ lỗi từ các thử nghiệm chức năng

1. Biên dịch Bitcoin để gỡ lỗi

Trong trường hợp bạn chưa làm được, hãy biên dịch bitcoin để gỡ lỗi (thay đổi cờ cấu hình khác khi bạn cần).

  $ make clean
$ ./configure CXXFLAGS = "- O0 -ggdb3"
$ make -j "$ (($ (sysctl -n hw.physicalcpu) +1))"
 
2. Đảm bảo bạn đã cài đặt lldb

Bạn sẽ thấy một cái gì đó như thế này:

  $ lldb -v
lldb-1001.0.13.3
 
3. Tạm dừng kiểm tra chức năng

Bạn cũng có thể tạm dừng thử nghiệm bằng chế độ ngủ nhưng sạch hơn nhiều (mặc dù có thể hơi khó hiểu) là sử dụng
trình gỡ lỗi trong python: pdb .

Thêm dòng sau vào trước kiểm tra chức năng gây ra lỗi mà bạn muốn gỡ lỗi:

  nhập pdb; pdb.set_trace ()
 

Sau đó chạy thử nghiệm của bạn. Bạn sẽ cần gọi kiểm tra trực tiếp và không chạy nó qua test_runner.py
thì bạn không thể truy cập vào bảng điều khiển pdb .

 $ ./test/f Chức năng/example_test.py
 
4. Đính kèm lldb vào quy trình đang chạy

Bắt đầu lldb với quy trình bitcoind đang chạy (có thể không hoạt động nếu bạn có các quy trình bitcoind khác đang chạy). Chỉ chạy lldb thay vì PATH = / usr / bin / usr / bin / lldb cũng có thể hiệu quả với bạn, nhưng nhiều người dường như gặp sự cố khi lldb cố gắng để sử dụng python hệ thống của họ trong trường hợp đó.

  $ PATH = / usr / bin / usr / bin / lldb -p $ (pgrep bitcoind)
 
5. Đặt các điểm ngắt của bạn trong lldb

Đặt cho bạn điểm ngắt bằng b , sau đó bạn phải nhập tiếp tục lldb đang đặt điểm dừng cho quá trình nữa.

  (lldb) b createwallet
Điểm ngắt 1: [...]
(lldb) tiếp tục
Tiếp tục xử lý XXXXX
 
6. Hãy để thử nghiệm tiếp tục

Giờ đây, bạn có thể cho phép bạn tiếp tục kiểm tra để quá trình thực sự đang chạy đến điểm ngắt của bạn.

  (Pdb) tiếp tục
 

Bây giờ bạn sẽ thấy thứ gì đó giống như thế này trong bạn lldb và có thể bắt đầu gỡ lỗi:

  Quá trình XXXXX đã dừng
* chuỗi # 10, name = 'bitcoin-httpworker.3', stop reason = breakpoint 1.1
    frame # 0: 0x00000001038c8e43 bitcoind`createwallet (request = 0x0000700004d55a10) tại rpcwallet.cpp: 2642: 9
   2639 trình tạo UniValue tĩnh (yêu cầu const JSONRPCRequest & amp;)
   2640 {
   2641 RPTrợ giúpMan {
- & gt; 2642 "createwallet",
   2643 "\ nTạo và tải ví mới. \ N",
   2644 {
   2645 {"wallet_name", RPCArg :: Type :: STR, RPCArg :: Optional :: NO, "Tên của ví mới. Nếu đây là đường dẫn, ví sẽ được tạo tại vị trí đường dẫn."},
Mục tiêu 0: (bitcoind) đã dừng.
(lldb)
 

Các công cụ khác dành cho giá trị mặc định

Kết xuất lõi

Kết xuất lõi là kết xuất đầy đủ của bộ nhớ làm việc của máy tính của bạn. Khi kích hoạt nó sẽ
được tạo trong / core trên máy tính của bạn trong trường hợp segfault xảy ra.

Để kích hoạt kết xuất lõi trên macOS, bạn phải chạy

  $ ulimit -c không giới hạn
 

thì bạn phải chạy quá trình mà bạn đang quan sát segfault trong cùng một thiết bị đầu cuối.
Sau đó, bạn có thể kiểm tra chúng trong thư mục / core của mình.

Bạn phải luôn đảm bảo không tạo ra nhiều bãi chứa lõi hơn mức bạn cần và dọn dẹp
thư mục / core của bạn khi bạn đã giải quyết được sự cố của mình. Kết xuất lõi là các tệp lớn và
có thể làm lộn xộn dung lượng đĩa của bạn rất nhanh.

valgrind

Cài đặt valgrind

Trên các phiên bản MacOS mới hơn, điều này khó hơn bạn nghĩ vì bạn
chỉ có thể cài đặt nó thông qua homebrew lên đến phiên bản 10.13. Nếu bạn hiện tại
cài đặt MacOS Mojave cập nhật, bạn sẽ phải sử dụng
làm theo tập lệnh để làm cho nó hoạt động.

  $ brew install --HEAD https://raw.githubusercontent.com/sowson/valgrind/master/valgrind.rb
 

Chạy bitcoind với valgrind < / code>

Sử dụng valgrind hoạt động tương tự như lldb . Bạn bắt đầu tệp thực thi nơi segfault có thể
xảy ra bằng cách sử dụng valgrind , khi quan sát thấy lỗi, bạn sẽ có thể kiểm tra nó.

Ví dụ:

  $ sudo valgrind src / bitcoind -regtest
 

Bây giờ, bạn có thể tương tác với bitcoind của mình bình thường bằng cách sử dụng bitcoin-cli , chẳng hạn, và
kích hoạt lỗi bằng tay bằng cách sử dụng các thông số phù hợp.

Các tài nguyên khác

Nhận trợ giúp

  • Bitcoin Stackexchange phải là đầu mối liên hệ đầu tiên của bạn nếu bạn thực sự gặp khó khăn
  • IRC channel là một khả năng khác để tìm trợ giúp cho các chủ đề cụ thể

READMEs

  • Tất nhiên, README của lõi Bitcoin có rất nhiều thông tin. Bạn có thể tìm thấy một số điểm trùng lặp với hướng dẫn này nhưng chúng vẫn nên
    rất hữu ích.

    • https://github.com/bitcoin/bitcoin/blob/master/src/test/README.md
    • https://github.com/bitcoin/bitcoin/blob/master/test/README.md

Các tài nguyên khác

https://medium.com/provoost-on-crypto/debugging-bitcoin-core-filities-tests-cc0aa6e7fd3e
https://bitcoin.stackexchange.com/questions/76521/debugging-bitcoin-unit-tests

lldb

Sử dụng lldb làm trình gỡ lỗi độc lập

Hướng dẫn LLVM trên lldb

BOOST


Xem thêm những thông tin liên quan đến chủ đề nhật ký gỡ lỗi cũ hiển thị giá trị bitcoin

LUNC, Jasmy, BTC, JUP Live Charts 24/7

  • Tác giả: Cryptoholics
  • Ngày đăng: 2022-07-09
  • Đánh giá: 4 ⭐ ( 8142 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: LUNC, Jasmy, BTC, JUP Live Charts 24/7

    Live streaming charts 24/7 mixed music to listen to along with a great group of other crypto enthusiasts people to chat with from all around the world.
    we change the coins up from time to time but right now there is Btc, UST, and LUNC and LUNA .

    Hope you enjoy it and maybe become a Cryptoholic member to help support these streams in the future.
    Thank You

    CRH Website: Https://CryptoholicsToken.com
    Cryptoholics Token App:
    https://s0cialhubappstore.com/apps/cryptoholics-token

    How to Buy (CRH) Cryptoholic Token
    https://youtu.be/kAkHyI5_lZI

    Please Go UpVote CRH) Token Here:
    SPACES: https://astrospaces.io/r/cryptoholics

    Follow Me On all Social media

    Join me on TeleGram:
    https://t.me/CryptoholicsToken

    Twitter
    https://twitter.com/Cryptoholics4

    FaceBook
    https://www.facebook.com/CryptoholicsToken

    IG:
    https://www.instagram.com/CryptoholicsToken/

    Discord
    https://discord.gg/aJXSJEKune

    Reddit
    https://www.reddit.com/r/CryptoholicsToken/

    Youtube Membership Support https://www.youtube.com/channel/UCsD0eIjUbJR4ILmFX6v5Ksg/join

    BITGET Trading: https://www.bitget.com/en/welfare/register?from=referral&clacCode=X0GQHJ95

    Get your Coins onto a LEDGER
    https://shop.ledger.com?r=f58ab64dadfd

    V's NFT"S for sale https://looksrare.org/collections/0xCd285ab5498CacB4b161823798F0607B6171550c

    Get your Free CoinBase Acct:
    Referral Link
    https://www.coinbase.com/join/afdahl_0

    Get your Free trial of TradingView here:
    https://www.tradingview.com/gopro/?share_your_love=NetworkKing

    CoinTracker is a cool program to keep track of your Trading information for taxes and other things as well Please use this link to get started. https://www.cointracker.io/i/xJxwIMnuO5hx

    All Music is from Artist.Io Here is My link https://artlist.io/Jeff-2289633

    *DISCLAIMER* We are NOT financial advisors. This stream is for informational and entertainment purposes only! Nothing said by me or anyone in the chat should be taken as financial advice.

    Subscribe and Click the Bell to Get Notifications
    Thank you For your views

    Contact INFO: Cryptoholicstoken@gmail.com

    CryptoLive CryptoMooning ALTcoins Cryptoholics luna BTC LUNC COINBASE btcusd JASMY jazfam lunaclassic crh CRHARMY

    crypto live, crypto live stream, crypto live trading, crypto live stream now, crypto live signals, crypto live trading stream, crypto live chart, crypto live day trading, crypto live scalping, crypto live update, crypto live trading signals

Cảnh báo "sốc" về giá trị Bitcoin trong tương lai

  • Tác giả: vov.vn
  • Đánh giá: 4 ⭐ ( 8494 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Một quan chức của Ngân hàng Trung ương Anh vừa đưa ra các cảnh báo rằng, trong tương lai, Bitcoin và các loại tiền số khác có thể mất hết giá trị, và người mua sẽ trắng tay.

Lỗi kỹ thuật xuất hiện, đồng Bitcoin rớt giá

  • Tác giả: m.nhipcaudautu.vn
  • Đánh giá: 3 ⭐ ( 4474 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Ngày 10-2, giá trị đồng Bitcoin giảm 100 USD giá trị sau khi một sàn giao dịch lớn cho loại tiền ảo này MtGox tuyên bố ngừng dịch vụ rút tiền.

Quản lý và xóa Nhật ký tìm kiếm

  • Tác giả: support.google.com
  • Đánh giá: 5 ⭐ ( 5635 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nếu bạn tìm kiếm trên Google khi đang bật chế độ Hoạt động trên web và ứng dụng, thì Google sẽ lưu những hoạt động như Nhật ký tìm kiếm vào Tài khoản G

Giá trị không được hiển thị trong kết quả dòng nhật ký trong Microsoft Dynamics NAV 2009

  • Tác giả: support.microsoft.com
  • Đánh giá: 3 ⭐ ( 5182 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khắc phục sự cố xảy ra sau khi thực hiện KB978996 trong Microsoft Dynamics NAV 2009.

Giá, biểu đồ, vốn hóa thị trường của Bitcoin (BTC)

  • Tác giả: coinmarketcap.com
  • Đánh giá: 3 ⭐ ( 3720 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nhận thông tin mới nhất về giá, vốn hóa thị trường, cặp giao dịch, biểu đồ và dữ liệu của Bitcoin (BTC) ngay hôm nay từ trang web theo dõi giá tiền mã hóa số một thế giới

Giá trị ảo của Bitcoin

  • Tác giả: vnexpress.net
  • Đánh giá: 3 ⭐ ( 9526 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bitcoin giống như cổ vật... chỉ có giá đầu cơ khi nhiều người sưu tầm, cất giữ, chứ không giúp con người ta sinh tồn khi thế giới bất ổn.

Xem thêm các bài viết khác thuộc chuyên mục: WordPress

See also  Tại sao e-mail của tôi không đến được người nhận? - nhận được email mà không có người nhận