Skip to content

Instantly share code, notes, and snippets.

@h-east
Created December 22, 2012 18:42
Show Gist options
  • Select an option

  • Save h-east/4360424 to your computer and use it in GitHub Desktop.

Select an option

Save h-east/4360424 to your computer and use it in GitHub Desktop.
Investigation for inside of Vim.
Vimのソースコードを調査して分かったことをコメントしていく。
@h-east
Copy link
Author

h-east commented Mar 22, 2013

b pathcmp してインサートモードで ファイル名補完を開始してbreakした時のバックトレース

(gdb) bt
#0  pathcmp (p=0x23e4ba0 "J4.txt", q=0x23e4bc0 "I1.txt", maxlen=-1)
    at misc2.c:6102
#1  0x00000000004d9758 in pstrcmp (a=0x23e4aa8, b=0x23e4ab0) at misc1.c:9787
#2  0x0000003346637d72 in msort_with_tmp.part.0 () from /lib64/libc.so.6
#3  0x0000003346637b5a in msort_with_tmp.part.0 () from /lib64/libc.so.6
#4  0x0000003346637b44 in msort_with_tmp.part.0 () from /lib64/libc.so.6
#5  0x00000033466380ac in qsort_r () from /lib64/libc.so.6
#6  0x00000000004d9eb9 in unix_expandpath (gap=0x7fff0da465a0, path=
    0x23e46a0 "*", wildoff=0, flags=43, didstar=0) at misc1.c:10001
#7  0x000000000051de2a in mch_expandpath (gap=0x7fff0da465a0, path=
    0x23e46a0 "*", flags=43) at os_unix.c:5471
#8  0x00000000004db08e in gen_expand_wildcards (num_pat=1, pat=0x855008,
    num_file=0x7fff0da46674, file=0x7fff0da46678, flags=43) at misc1.c:10577
#9  0x00000000004d9427 in expand_wildcards (num_pat=1, pat=0x855008, num_file=
    0x7fff0da46674, file=0x7fff0da46678, flags=43) at misc1.c:9323
#10 0x0000000000428ae8 in ins_compl_get_exp (ini=0x855020) at edit.c:4333
#11 0x0000000000429759 in ins_compl_next (allow_get_expansion=1, count=1,
    insert_match=1) at edit.c:4707
#12 0x000000000042ac9e in ins_complete (c=6) at edit.c:5378
#13 0x0000000000423cfb in edit (cmdchar=105, startln=0, count=1) at edit.c:1402
#14 0x00000000004fcc69 in invoke_edit (cap=0x7fff0da46980, repl=0, cmd=105,
    startln=0) at normal.c:9218
#15 0x00000000004fcc02 in nv_edit (cap=0x7fff0da46980) at normal.c:9191
#16 0x00000000004eeed7 in normal_cmd (oap=0x7fff0da46a50, toplevel=1)
    at normal.c:1199
#17 0x00000000005ca166 in main_loop (cmdwin=0, noexmode=0) at main.c:1322
#18 0x00000000005c9ac3 in main (argc=11, argv=0x7fff0da46d88) at main.c:1013

@h-east
Copy link
Author

h-east commented May 22, 2013

7.3.1004で nfa_regcomp_start() にbreak張って

/\_.*

したときのback trace.

(gdb) bt
#0  nfa_regcomp_start (expr=0xfbad00 "\\_.*", re_flags=1) at regexp_nfa.c:229
#1  0x0000000000543e07 in nfa_regcomp (expr=0xfbad00 "\\_.*", re_flags=1)
    at regexp_nfa.c:3664
#2  0x0000000000544217 in vim_regcomp (expr_arg=0xfbad00 "\\_.*", re_flags=1)
    at regexp.c:7827
#3  0x0000000000556fb5 in search_regcomp (pat=0xfbad00 "\\_.*", pat_save=0,
    pat_use=2, options=0, regmatch=0x7fff7ddfab40) at search.c:216
#4  0x0000000000557925 in searchit (win=0xfa40c0, buf=0xfa59b0, pos=
    0x7fff7ddfad80, dir=1, pat=0xfbad00 "\\_.*", count=1, options=12, pat_use=
    2, stop_lnum=0, tm=0x0) at search.c:560
#5  0x0000000000558f68 in do_search (oap=0x7fff7ddfaf70, dirc=47, pat=
    0xfbad04 "", count=1, options=542, tm=0x0) at search.c:1356
#6  0x00000000004fa4bc in normal_search (cap=0x7fff7ddfaea0, dir=47, pat=
    0xfbad00 "\\_.*", opt=512) at normal.c:6433
#7  0x00000000004fa40b in nv_search (cap=0x7fff7ddfaea0) at normal.c:6400
#8  0x00000000004f13e1 in normal_cmd (oap=0x7fff7ddfaf70, toplevel=1)
    at normal.c:1200
#9  0x00000000005d7652 in main_loop (cmdwin=0, noexmode=0) at main.c:1329
#10 0x00000000005d6faf in main (argc=7, argv=0x7fff7ddfb2a8) at main.c:1020

@h-east
Copy link
Author

h-east commented May 22, 2013

↑の続き。gdbでcして無限ループに陥った状態で ctrl-c で止めた時の back trace

(gdb) bt
#0  0x0000000000541c2a in nfa_regmatch (start=0xfef2f0, submatch=
    0x7fff7ddfa810, m=0x7fff7ddfa630) at regexp_nfa.c:2989
#1  0x00000000005439ad in nfa_regtry (start=0xfef2f0, col=0)
    at regexp_nfa.c:3528
#2  0x0000000000543dc4 in nfa_regexec_both (line=0xfe064f "", col=0)
    at regexp_nfa.c:3636
#3  0x0000000000544145 in nfa_regexec_multi (rmp=0x7fff7ddfab40, win=0xfa40c0,
    buf=0xfa59b0, lnum=1, col=0, tm=0x0) at regexp_nfa.c:3843
#4  0x000000000054431e in vim_regexec_multi (rmp=0x7fff7ddfab40, win=0xfa40c0,
    buf=0xfa59b0, lnum=1, col=0, tm=0x0) at regexp.c:7918
#5  0x0000000000557b7c in searchit (win=0xfa40c0, buf=0xfa59b0, pos=
    0x7fff7ddfad80, dir=1, pat=0xfbad00 "\\_.*", count=1, options=12, pat_use=
    2, stop_lnum=0, tm=0x0) at search.c:639
#6  0x0000000000558f68 in do_search (oap=0x7fff7ddfaf70, dirc=47, pat=
    0xfbad04 "", count=1, options=542, tm=0x0) at search.c:1356
#7  0x00000000004fa4bc in normal_search (cap=0x7fff7ddfaea0, dir=47, pat=
    0xfbad00 "\\_.*", opt=512) at normal.c:6433
#8  0x00000000004fa40b in nv_search (cap=0x7fff7ddfaea0) at normal.c:6400
#9  0x00000000004f13e1 in normal_cmd (oap=0x7fff7ddfaf70, toplevel=1)
    at normal.c:1200
#10 0x00000000005d7652 in main_loop (cmdwin=0, noexmode=0) at main.c:1329
#11 0x00000000005d6faf in main (argc=7, argv=0x7fff7ddfb2a8) at main.c:1020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment