Best tools noone uses: autoexp.dat

Не прошло и полугода, как родилось продолжение к пилотной серии про underdog tools. Очередной отличный инструмент, которым регулярно не пользуются, это autoexp.dat.

autoexp.dat – это файл с настройками показа всякого в соответствующих окошках Visual Studio. В секции [autoexpand] можно задать свои правила формирования строки value для сложных объектов в окошках watches/variables, типа такого:

[code lang="cpp"]
CPlayer=life= speed=(, )
[/code]

Эта же самая строка будет показана и при наведении мышкой на переменную. Поддерживаются всякие модификаторы скалярных типов а-ля printf; есть модификаторы для ASCII и Unicode строк. Файл автоматически перегружается при каждом запуске отладчика; те. студию перезапускать не надо, только сессию отладки. Синтаксис слегка документирован.

Однако [autoexpand] поддерживает только простейшие выражения – например, оно не сумеет перемножить два поля. Но тут в 2005й студии приходит на выручку секция [visualizer]. Ее синтаксис в файле не документирован совсем, однако несложно наполовину догадаться, остальное нагуглить. Строчка, которую можно задать в [autoexpand], здесь называется preview:

[code lang="cpp"]
CPlayer{
preview ( #( "life=", [$c.m_fHitsLeft*$c.m_fHitsFactor], " speed=(", $c.m_vVelocity.x, ",", $c.m_vVelocity.x, ")" ) )
}
[/code]

Токен $c символизирует текущую переменную, список элементов создается строчкой #( … ). Выражения поддерживаются несколько более сложные, чем в autoexpand; еще preview из секции visualizer более приоритетно, чем autoexpand.

Но это еще не конец, секция visualizer позволяет и показ списка детей перекроить по-своему. Пример для самописного шаблонного вектора:

[code lang="cpp"]
CMyVector<*>{
children(#(
[raw-members]: [$c,!],
[size] : $c.m_iLength,
#array ( expr : $c.m_pData[$i], size : $c.m_iLength )
))
}
[/code]

Что происходит в этом примере? Список детей для инстанса шаблона CMyVector с любым параметром подменяется со стандартного на наш собственный – с элементами raw-members, size, и массивом выражений, которые вычисляются по указанному правилу. Результат выглядит примерно вот так:

Несколько удобнее, чем тупо пялиться на значение указателя, да.

Вдобавок к этому всему, visualizer умеет #if, #else, #switch, #list, #tree – те. условные переходы (везде) и поддержку отображения списков и деревьев – так что у заинтересованных читателей есть масса пространства для упражнений.

  • http://__vortex__.livejournal.com vortex

    Почему никто? Мы пользуемся. Давным давно уже написали вижуалайзеры для наших типов, и радуемся. :) А так да. Функциональность очень полезная.

  • Earwin

    Для Lua есть комплект вижуалайзеров, чтобы можно было по lua-стейтам и прочим структурам с комфортом шариться.