2008-09-19 14 views

Antwort

1

Angenommen, Sie haben eine std::wstring str. Folgendes sollte in gdb arbeiten:

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

(Die Option -l in printf es eine lange Reihe macht, und ich glaube, dass Sie die „call“ Anweisung müssen, weil der gewöhnliche gdb printf nicht wie diese Option.)

0

Ich habe etwas Forschung, und das ist gdb PR716, PR1998, PR2264. Anscheinend ist dies eine häufig angeforderte Funktion, die noch nicht implementiert ist.

8

call printf %ls funktioniert nur manchmal, aber um es zu bekommen überhaupt 6.3 Sie in gdb arbeiten müssen die void Besetzung und Zeilenvorschub \n hier gezeigt:

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

hier ist ein zuverlässiger Befehl, den Sie in Ihrem setzen. gdbinit, die auch nicht-ASCII-Code Punkte zeigt:

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

geben Sie einfach wc (kurz für wc_print) entweder mit einem std::wstring oder wchar_t* .

Weitere Details unter http://www.firstobject.com/wchar_t-gdb.htm