$ LANG=en_US.utf8
$ locale
LANG=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="C.utf8"
LC_TIME="C.utf8"
LC_COLLATE="C.utf8"
LC_MONETARY="C.utf8"
LC_MESSAGES="C.utf8"
LC_ALL=
$ ggdb -a '--file=in in' src/grep 'b localeinfo.c:99 if uc == 250' c
spawn gdb -n -q
(gdb) file src/grep
Reading symbols from src/grep...
(gdb) set print null-stop
(gdb) set print sevenbit-strings
(gdb) set print elements 0
(gdb) set height 0
(gdb) set print pretty
(gdb) set unwindonsignal on
(gdb) set style address foreground white
(gdb) b main
Breakpoint 1 at 0x: file grep.c, line 2469.
(gdb) run --file=in in
Starting program: src/grep --file=in in

Breakpoint 1, main (argc=3, argv=0x) at grep.c:2469
2469	  char *keys = NULL;
(gdb) b localeinfo.c:99 if uc == 250
Breakpoint 2 at 0x: file localeinfo.c, line 99.
(gdb) c
Continuing.

Breakpoint 2, init_localeinfo (localeinfo=0x <localeinfo>) at localeinfo.c:99
99	      mbstate_t s = {0};
(gdb) s
101	      size_t len = mbrtowc (&wc, &c, 1, &s);
(gdb)
rpl_mbrtowc (pwc=0x L"\xffff", s=0x "\372\377\377\377\377\377\377\377\377", n=1, ps=0x) at mbrtowc.c:98
98	  if (! pwc)
(gdb)
138	  ret = mbrtowc (pwc, s, n, ps);
(gdb)
147	  if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE))
(gdb) p/d ret
$1 = -1
(gdb) p pwc
$2 = 0x L"\xffff"
(gdb) p s
$3 = 0x "\372\377\377\377\377\377\377\377\377"
(gdb) p n
$4 = 1
(gdb) p *ps
$5 = {
  __count = 0,
  __value = {
    __wch = 0,
    __wchb = ""
  }
}
(gdb) s
hard_locale (category=2) at hard-locale.c:31
31	  if (setlocale_null_r (category, locale, sizeof (locale)))
(gdb)
setlocale_null_r (category=2, buf=0x "en_US.utf8", bufsize=257) at setlocale_null.c:287
287	  if (category == LC_ALL)
(gdb)
290	    return setlocale_null_unlocked (category, buf, bufsize);
(gdb)
setlocale_null_unlocked (category=2, buf=0x "en_US.utf8", bufsize=257) at setlocale_null.c:140
140	  const char *result = setlocale_null_androidfix (category);
(gdb)
setlocale_null_androidfix (category=2) at setlocale_null.c:62
62	  const char *result = setlocale (category, NULL);
(gdb)
87	  return result;
(gdb) fin
Run till exit from #0  setlocale_null_androidfix (category=2) at setlocale_null.c:87
0x in setlocale_null_unlocked (category=2, buf=0x "en_US.utf8", bufsize=257) at setlocale_null.c:140
140	  const char *result = setlocale_null_androidfix (category);
Value returned is $6 = 0x "en_US.utf8"
(gdb)
Run till exit from #0  0x in setlocale_null_unlocked (category=2, buf=0x "en_US.utf8", bufsize=257) at setlocale_null.c:140
setlocale_null_r (category=2, buf=0x "en_US.utf8", bufsize=257) at setlocale_null.c:298
298	}
Value returned is $7 = 0
(gdb)
Run till exit from #0  setlocale_null_r (category=2, buf=0x "en_US.utf8", bufsize=257) at setlocale_null.c:298
hard_locale (category=2) at hard-locale.c:31
31	  if (setlocale_null_r (category, locale, sizeof (locale)))
Value returned is $8 = 0
(gdb)
Run till exit from #0  hard_locale (category=2) at hard-locale.c:31
0x in rpl_mbrtowc (pwc=0x L"\xffff",
    s=0x "\372\377\377\377\377\377\377\377\377", n=1, ps=0x) at mbrtowc.c:147
147	  if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE))
Value returned is $9 = true
(gdb) s
155	  return ret;
(gdb) fin
Run till exit from #0  rpl_mbrtowc (pwc=0x L"\xffff", s=0x "\372\377\377\377\377\377\377\377\377", n=1, ps=0x) at mbrtowc.c:155
0x in init_localeinfo (localeinfo=0x <localeinfo>) at localeinfo.c:101
101	      size_t len = mbrtowc (&wc, &c, 1, &s);
Value returned is $10 = 18446744073709551615
(gdb) s
102	      localeinfo->sbclen[uc] = len <= 1 ? 1 : - (int) - len;
(gdb)
103	      localeinfo->sbctowc[uc] = len <= 1 ? wc : WEOF;
(gdb) p localeinfo->sbclen[uc]
$11 = -1 '\377'
(gdb) q
