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 foo
n
<Enter>
s
c
finish
zub
の値を出力するには p zub
bt
を実行すると、現在のロケーションからのバックトレース(コールスタック)が表示されます。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