Как мне распечатать UChar * var как строку изнутри GDB? - PullRequest
1 голос
/ 05 июня 2009

Я работал над незнакомой кодовой базой, которая использует UChar * в качестве строк. Учары определяются следующим образом (по крайней мере, в соответствии с GDB)

(gdb) ptype UChar
type = short unsigned int

Однако, когда я пытаюсь распечатать их в GDB, я просто получаю адрес. Я также могу индексировать указатель и получать значения каждого символа.

Есть ли способ напечатать переменную типа UChar * из gdb и получить значимую строку?

Кроме того, это на OS X, если это имеет какое-либо значение.

Ответы [ 4 ]

3 голосов
/ 10 сентября 2009

Просто определите эту команду в своем .gdbinit и введите uc varname (uc, вероятно, будет работать в качестве краткой формы для определенной вами команды ucharprint)

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

Вам не нужно беспокоиться о порядке байтов, поскольку каждое беззнаковое короткое число в вашем типе UTF-16 UChar содержит кодовую точку (или половину суррогата) как собственное двоичное целое число.

0 голосов
/ 05 июня 2009

если это строка ascii, вы можете попытаться указать gdb переосмыслить:

(gdb) print (char*) theUcharPtr
0 голосов
/ 14 июля 2009

печать совпадает с x; x / 1s 0x1234 - распечатает это место в памяти в виде строки, если вы продолжите нажимать возврат каретки, он напечатает следующую строку ... и т. д. *

Если вы хотите что-то непрерывно контролировать, используйте display / с тем же спецификатором формата, что и x (print). «display / 1s 0x1234», тогда каждый раз, когда вы проходите через точку останова или один шаг, вы увидите распечатанную вами информацию, обновленную и т. д. ...

0 голосов
/ 05 июня 2009

Сначала вы должны выяснить, что на самом деле представляет UChar. Это скорее всего UTF-16 или UCS-2 (но BE или LE?). Как только вы определите это, вы захотите предоставить (вы можете использовать существующий код, такой как iconv ) метод отладки для преобразования в UTF-8. Подробнее см. http://www.skynet.ie/~caolan/TechTexts/GdbUnicodePrinting.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...