Как зaставить отладчик VS быть более умным...

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Гость
#1
Файл autoexp.dat находится в каталоге %Visual Studio Folder%\Common\MSDev98\Bin
(%Visual Studio Folder% - каталог, в которой установлен пакет Visual Studio).
Oтладчик "умеет" распознавать стандартные структуры данных (CString, RECT и т. п.) и показывать их содержимое в окнах Variables и Watch, а также во всплывающих подсказках. Оказывается, можно не только изменить представление этих структур отладчиком, но и определить представление для собственных структур. Именно для этого и используется секция [AutoExpand]. Каждая строка в ней описывает одну структуру (или класс). Описание имеет следующий формат:
Код:
   имя_типа = текст<имя_поля[,ключ_форматирования]>...
С помощью файла autoexp.dat можно выполнять некоторые тонкие настройки отладчика. Изменения вступают в силу после перезапуска среды Visual C++.
Хотелось бы услышать опыт других в этом вопросе и других тонкостях настройки
Visual Studio
 

Гость
#2
Очень полезно во время отладки пользоваться псевдорегистрами, к ним относятся:
- Регистры процессора (@eax, @ebx и т.д.)
- Код последней ошибки (@err), который возвращается GetLastError()
- Thread information block для текущего потока (@tiB)
В watch window добавляем регистр @err и всегда имеем возможность смотреть код ошибки. Его можно "расшифровать" при помощи ErrorLookup, если ErrorLookup запускать лень, то в watch window пишем @err,hr и всегда видим текстовое описание ошибки. Кстати, если в программе используются user-defined коды ошибок, то их текстовое описание для отладчика можно добавлять в autoexp.dat в секции [hresult].
TIB текущего потока можно использовать для условных точек останова: условие вида @TIB==0x7f000000 заставит срабатывать breakpoint только в контексте определенного потока (разумеется, правильное значение TIB для потока надо будет посмотреть заранее). По смещению @tib+24 лежит thread ID, можно использовать его. Но в 98-х @tib не работает, там нужно регистр @fs использовать.
Из регистров процессора я обычно использую только @eax, чтобы всегда видеть результат, возвращенный функцией.

В том же файле autoexp.dat в секции [ExecutionControl] можно запрещать вхождение отладчика внутрь каких-либо функций (при нажатии Step Into). Например, запретить входить в конструкторы и операторы присваивания класса CString и во все функции класса CMyClass:
[ExecutionControl]
CString::CString=NoStepInto
CString::operator==NoStepInto
CMyClass::*=NoStepInto

Ну и много прикольных штучек есть. Например, можно добавить ключ '/Y3' в командной строке msdev (в shortcut'е), тогда будет показываться время компиляции.

У Рихтера давно вычитал и применяю с удовольствием...
Очень хороший по "этим делам"
обзор Александрa Шаргинa на RSDN.
http://www.rsdn.ru/article/vcpp/vcdebug-1.xml
 

admin

Well-Known Member
08.08.2003
2 754
1
#4
????
Форум небольшой, а конкуренция растет :unsure: Бывает.
 
Статус
Закрыто для дальнейших ответов.