Nvim :help ページは、 生成された ソース tree-sitter-vimdoc パーサーを使用して。
ulimit -c unlimited
coredumpctl -1 gdb
coredumpctl はオプションのツールなので、インストールする必要がある場合がありますsudo apt install systemd-coredump
backtrace.txt ファイルを送信してください2>&1 coredumpctl -1 gdb | tee -a backtrace.txt
(gdb) thread apply all bt full
coredumpctl のないシステムでは、現在のディレクトリまたは他の場所に core ダンプファイルが表示される場合があります。apport がインストールされている Linux システム(Ubuntu など)では、コアダンプファイルが保存されるディレクトリは、システム構成によって /var/lib/apport/coredump または他の場所になります(/proc/sys/kernel/core_pattern を参照)。https://stackoverflow.com/a/18368068 も参照してください。./core ダンプファイルからバックトレースを取得するにはgdb build/bin/nvim ./core 2>&1 | tee backtrace.txt
(gdb) thread apply all bt full
nvim がクラッシュした場合、バックトレースは Console.app(古い macOS バージョンの「Crash Reports」または「User Diagnostic Reports」)で確認できます。open -a Console
/cores/ ディレクトリが存在し、書き込み可能であることを確認しますsudo mkdir /cores
sudo chown root:admin /cores
sudo chmod 1775 /cores
unlimited に設定しますulimit -c unlimited
~/.bashrc など)に追加します。lldb で開くことができますlldb -c /cores/core.12345
/etc/launchd.conf を使用してコアダンプを有効にするなど)。TEST_TAGを使用して、一致するバスタグ(#foo の形式、例: it("test #foo ...", ...))のテストを実行します。GDB=1 TEST_TAG=foo make functionaltest
gdb build/bin/nvim
(gdb) target remote localhost:7777-- https://github.com/neovim/neovim/blob/master/test/functional/testnvim.lua で nvim_argv を参照してください。lldb .deps/usr/bin/luajit -- .deps/usr/bin/busted --lpath="./build/?.lua" test/unit/
nvim プロセスにアタッチする場合(ヒント: 実行中の Nvim インスタンスの pid は getpid() を呼び出すことで取得できます)、次のようにします。gdb -tui -p 1234 build/bin/nvim
gdb インタラクティブプロンプトが表示されます。いつでもfoo() 関数にブレークポイントを設定するには break foon<Enter>scfinishzub の値を出力するには p zubbtを実行すると、現在のロケーションからのバックトレース(コールスタック)が表示されます。CTRL-x CTRL-aまたはtui enableを実行すると、現在のデバッグコンテキストにおけるソースファイルのTUIビューが表示されます。これによりgdbの「フロントエンド」を使用する必要がなくなるため、非常に役立ちます。<up>と<down>を押してソースファイルビューをスクロールします。set record full insn-number-max unlimited
continueを少し実行します(少なくともmain()が実行されるまで)record
revert-next、reverse-stepなどに使用して、デバッガーを巻き戻します。gdbクライアントを同じ実行中のnvimプロセスに接続することも、ローカルのgdbを使用してリモートのnvimプロセスに接続することもできます。gdbserverを使用すると、単一のプロセスにアタッチして、複数のgdbクライアントから制御できます。nvimに接続されたgdbserverを起動します。gdbserver :6666 build/bin/nvim 2> gdbserver.log
gdbserverはポート6666でリッスンしています。別のターミナルでこのデバッグセッションに接続する必要があります。gdb build/bin/nvim
gdbを入力したら、リモートセッションに接続する必要があります。(gdb) target remote localhost:6666
signal (SIGTTOU, SIG_IGN);
if (!tcsetpgrp(data->input.in_fd, getpid())) {
perror("tcsetpgrp failed");
}
tui.c:terminfo_start。gdbserverメソッドを使用してデバッグセッションをすばやく開始するために、カスタムメイクファイルhttps://github.com/neovim/neovim/blob/master/BUILD.md#custom-makefileを使用することを検討してください。この例local.mkは、`make debug`を入力するとデバッグセッションを作成します。.PHONY: dbg-start dbg-attach debug build
build:
@$(MAKE) nvim
dbg-start: build
@tmux new-window -n 'dbg-neovim' 'gdbserver :6666 ./build/bin/nvim -D'
dbg-attach:
@tmux new-window -n 'dbg-cgdb' 'cgdb -x gdb_start.sh ./build/bin/nvim'
debug: dbg-start dbg-attach
gdb_start.shは、デバッガーが起動したときに呼び出されるgdbコマンドを含んでいます。dbg-startルールによって起動されたサーバーに接続する必要があります。以下に例を示します。(gdb) target remote localhost:6666 (gdb) br main