Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5657

Vim の debug をやるときのメモ

$
0
0

Vim に限った話ではないけれど。

diff --git a/src/Makefile b/src/Makefile
index 9b50eca6d..340d60b1a 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -593,7 +593,7 @@ CClink = $(CC)
 # When using -g with some older versions of Linux you might get a
 # statically linked executable.
 # When not defined, configure will try to use -O2 -g for gcc and -O for cc.
-#CFLAGS = -g
+CFLAGS = -ggdb3
 #CFLAGS = -O

 # Optimization limits - depends on the compiler.  Automatic check in configure
@@ -1162,7 +1162,7 @@ INSTALL_DATA_R    = cp -r

 ### Program to run on installed binary.  Use the second one to disable strip.
 #STRIP = strip
-#STRIP = /bin/true
+STRIP = /bin/true

 ### Permissions for binaries  {{{1
 BINMOD = 755

ggdb3

これによって、最適化をやめて debug info を GDB 用に出力するようになる。最適化をやめるとアセンブリ言語の内容 (つまり CPU の動作) が変わってくる。最適化が行われて、変数処理がすべてレジスタ上で完結しているような場合には optimized out されて見えなくなってしまう。-ggdb3しておけばすべて見えるはず。

strip

STRIPには $ make installするときに実行されるプログラムを定義する。/bin/trueの行をアンコメントすると、つまり strip しなくなる。strip すると symbol や section の情報が取り除かれてしまうので debug は難しくなる。

普通に build した Vim で問題が起きた場合

再現手順が分かっていて上の patch 入りでも再現する場合にはいいけれども、そうでない場合や、何の準備もなく急に問題が起きた場合の対応: 上述の通り、build した binary そのものは strip されておらず、$ make installするときに、strip された binary を配置しているようだ。なので、急に問題が起きて core dump だけが残ったというような場合でも、落ちた時の (install した) binary ではなく build した binary そのものを使えば symbol などは見れる。

$ gdb repository/vim/src/vim core-file
    とか
$ gdb -p $(pgrep vim) repository/vim/src/vim

参考文書

https://vimconf.org/2018/slides/modes-vimconf2018-ujihisa.pdf


Viewing all articles
Browse latest Browse all 5657

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>