В Visual Studio 2012 я ищу способ настроить отображение по умолчанию типов с плавающей точкой в окнах Autos, Locals и Watch. Я знаком с утилитой Native Visualizer (Natvis), но не вижу каких-либо средств форматирования отладчика для этого. Кроме того, я не знаю каких-либо способов переопределить отображение по умолчанию любых примитивных типов (кроме включения hex).
Цель состоит в том, чтобы создать отображаемые строки с меньшим количеством цифр, развернутых для типов, соответствующих точкам, геометрическим векторам и т. Д., Но при этом при раскрытии типов все еще отображается вся точность. Так, например, я мог бы иметь переменную отображения типа точки как (0.000, 1.234, 2.429)
вместо m_x = 0.00000000, m_y = 1.234245213...
в средней колонке окна Autos.
Я просмотрел спецификаторы формата на эта страница, но не вижу способа контролировать точность с плавающей точкой.
К сожалению, на самом деле нет никакого способа сделать этот мелкозернистый уровень изменений в отладке C ++. На управляемом языке это было бы возможно в некоторых ограниченных сценариях (когда примитивы были полями объектов и отмечены специальными [DebuggerDisplay]
атрибуты). Для C ++ этот тип настройки просто не существует.
Хотя это не поддерживается в их документация, мы использовали следующее определение для сокращения чисел (в VS 2015):
<Type Name="MyVec3d">
<DisplayString>{vectorX,g}, {vectorY,g}, {vectorZ,g}</DisplayString>
</Type>
Примитивные типы в настоящее время не могут быть NatVizzed. Однако, если конкретные примитивы, которые вы хотите просмотреть, являются членами другого типа, который вы можете просматривать, вы можете применить форматирование к этому типу, например
<!-- displays the double value as 0.000 -->
<Type Name="DoubleHolder">
<DisplayString>{(int)myDouble}.{(int)(myDouble*1000) % 1000}</DisplayString>
</Type>
Единственный способ сделать это, о котором я знаю, это написать собственную DLL визуализатора. Увидеть ответ на вопрос «Как написать собственную DLL-библиотеку визуализатора для отладчика Visual Studio 2012?».
Я успешно использовал это и источники, связанные в этом ответе, для написания пользовательских визуализаторов, которые отображают члены с плавающей запятой различных типов с требуемой точностью.
Вы не имеете большого контроля над этим. Мы смогли получить что-то немного немного лучше, чем представление по умолчанию, однако, приведение наших двойных чисел к плавающим для предварительного просмотра:
<DisplayString>{{x={(float)x} y={(float)y}}}</DisplayString>
Мы оставили их как двойники в развернутой версии, чтобы вы могли видеть истинные значения. Этого было достаточно для нас, чтобы упаковать четыре или пять значений по горизонтали вместо обычных трех. У этого все еще есть некоторые недостатки: последние несколько цифр в плавающем элементе будут мусором и могут заставить вас думать, что у вас есть ошибки точности, хотя на самом деле это не так. Однако до тех пор, пока Microsoft не добавит правильные спецификаторы форматирования для числового вывода, это, пожалуй, лучшее, что мы можем сделать.
Между прочим, вы, вероятно, можете получить аналогичную «прерванную точность», приведя ваши числа с плавающей точкой к целым, если значения обычно достаточно велики.