2008-09-19 23 views

Odpowiedz

1

Załóżmy, że masz std::wstring str. Poniższa powinien pracować w gdb:

call printf("%ls", str._M_data()) 

(w opcji -l w printf sprawia, że ​​długi łańcuch, a ja wierzę, że potrzebujemy „call” oświadczenie, ponieważ zwykły gdb printf nie lubi tej opcji).

0

Zrobiłem kilka badań, a to jest gdb PR716, PR1998, PR2264. Najwyraźniej jest to funkcja często żądana, która nie została jeszcze zaimplementowana.

8

call printf %ls działa tylko czasami, ale aby zmusić go do pracy w ogóle w gdb 6.3 potrzebujesz void obsady zaś Linefeed \n pokazano poniżej:

call (void)printf("\"%ls\"\n",str.c_str())

Oto bardziej niezawodny poleceń można umieścić w swoim. gdbinit który pokazuje również spoza ASCII punkty kodowe:

define wc_print 
echo " 
set $c = (wchar_t*)$arg0 
while (*$c) 
    if (*$c > 0x7f) 
    printf "[%x]", *$c 
    else 
    printf "%c", *$c 
    end 
    set $c++ 
end 
echo "\n 
end

wystarczy wpisać wc (skrót wc_print) albo z std::wstring lub wchar_t* .

Więcej szczegółów pod adresem http://www.firstobject.com/wchar_t-gdb.htm