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 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