gdb: проверка того, что нужно для разумной печати значений

#c #c #gdb

#c #c #gdb

Вопрос:

Я хочу написать функцию gdb для печати значения чего-либо в зависимости от типа его аргумента, что-то вроде :

 define psmart
  if (whatis $arg0) =~ vector
    pvector   // stl-views
  else if (it's a pointer)
    p*
  else
    p
  end
end
  

В настоящее время я не могу каким-либо образом проверить вывод whatis в функции gdb. Пожалуйста, укажите мне, как это можно сделать (или альтернативные инструменты, которые дают больше мощности / контроля).

Ответ №1:

Пожалуйста, укажите мне, как это можно сделать (или альтернативные инструменты, которые дают больше мощности / контроля)

Возможно, вам вообще не следует писать эту функцию gdb. Вместо этого используйте gdb pretty-printers на Python. После того, как вы настроили его, print command обнаружит контейнеры STL без каких-либо усилий с вашей стороны и выведет их в более удобочитаемой форме, как это делают stl-представления.

Комментарии:

1. спасибо, мне все еще нужно попробовать это (некоторые сетевые разрешения на моем компьютере разработчика запрещают подключения svn / http), но это может сработать

2. кстати, есть какие-либо прямые способы (в gdb) для выполнения таких пользовательских улучшений (или мне нужно изучать python для написания сценариев gdb?)

3. Нет, вам не нужно изучать Python, просто следуйте инструкциям по настройке pretty-printers. Или используйте любой дистрибутив (Fedora 11 ) с уже настроенной gdb с pretty-printers.