Войти
ПрограммированиеФорумОбщее

Отладчик Visual Studio

Страницы: 1 2 3 4 5 Следующая »
#0
11:20, 27 фев. 2014

Всем привет!

Сам сижу в Microsoft Visual Studio 2013 Professional. Интересует настройка отладчика для C++. А именно хочется научиться задавать форматирование вывода для своих типов данных. Так как от STL я отказался, и написал свой вектор, то мне необходимо чтобы в отладке выводились все его элементы и их количество. Поделитесь знаниями, кто уже настраивал.

Ну и может кому пригодится (для Microsoft Visual Studio 2013 Professional) убрать вход в STL функции в отладчике:

1. Идём по пути C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\.
2. Открываем файл default.natstepfilter в текстовом редакторе.
3. В ветвь StepFilter добавляем следующий текст:

<Function><Name>std::.*</Name><Action>NoStepInto</Action></Function>

Теперь по использованию F11 в отладчике Вы не будите заходить в STL-функции.


#1
12:07, 27 фев. 2014

s3dworld
Ситуация практичесаи как у меня: у меня тоже студия 2013 Pro и велосипедные контейнеры. Ещё скажи, что студию с Dreamspark получил :).

Читал, что для их отладки нужно менять какой-то файл студии. Так как я не люблю такие костыли, то мне пришлось смириться с этими неудобствами отладки.
Может в новой студии что-то и изменилось, но вряд ли...

#2
12:10, 27 фев. 2014

gammaker
> Ещё скажи, что студию с Dreamspark получил :).
Да нет, покупал ещё тогда 2012 версию. А как вышла 2013, обновился.

> Читал, что для их отладки нужно менять какой-то файл студии.
Да, это и надо. Я залез, тёмный лес. Думаю что долго буду разбираться. Но раз никто не знает, придётся самому.

#3
12:45, 27 фев. 2014

x
Спасибо!

#4
12:52, 27 фев. 2014

s3dworld
Вот здесь есть еще кое-что
http://www.rsdn.ru/article/vcpp/vcdebug-1.xml#EWGAE
Раздел "Файл autoexp.dat"

#5
18:40, 27 фев. 2014

x
> http://blogs.msdn.com/b/vcblog/archive/2012/07/12/10329460.aspx
О, это уже поинтереснее. Но я так понимаю, в папку с проектом это всё равно не запихнёшь? И здесь нету xml-исходника с визуализацией массива, только картинки. Походив по ссылкам, нашёл более подробное описание:
http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2

С массивами вроде всё понятно, а что по поводу строк?

<Type Name="ATL::CStringT<wchar_t,*>"> 
  <DisplayString>{m_pszData,su}</DisplayString> 
  <StringView>m_pszData,su</StringView> 
</Type>
Что такое su? Размер строки, указатель на конец строки? Или он означает, что строка заканчивается на '\0'?

Я правильно понимаю, что там можно использовать любые выражения и приведения типов?

Есть что-нибудь подобное для Eclipse CDT?

#6
21:28, 27 фев. 2014

Оказывается, и с массивами ничего непонятно. У меня в велосипедном массиве (шаблонном) переменные-члены - указатели на данные типа void*. Как их в отладчике привести к T*? Как ему вообще дать понять, что это параметр шаблона? В std::vector из встроенных файлов между угловыми скобками в названии типа просто стоит *. Но там и не нужно знать T, так как указатели и так имеют тип T*.
То есть нужно что-то типа этого:

    <Type Name="array<*>">
    <DisplayString>{{ Size={(T*)data.End-data.First} }}</DisplayString>
    <Expand>
        <Item Name="Size" ExcludeView="simple">(T*)data.End-data.First</Item>
        <Item Name="Capacity" ExcludeView="simple">(T*)((char*)data.Data+data.Size)-(T*)data.First</Item>
        <ArrayItems>
      <Size>(T*)data.End-(T*)data.First</Size>
            <ValuePointer>(T*)data.First</ValuePointer>
        </ArrayItems>
    </Expand>
    </Type>

#7
22:35, 27 фев. 2014

Эй, есть кто-нибудь живой? Как сделать правильное отображение не null-terminated строки, если есть указатели start и end?

#8
19:08, 28 фев. 2014

Разобрался с массивами. Надо было просто написать в классе массива typedef T ET, а в .natvis из #8 заменить все T на ET. Это я так пишу, вдруг кому пригодится, если ещё кто-нибудь в живых остался.
А со строками похоже сделать ничего нельзя. Пробовал в выражении вызвать метод, которая добавляет '\0' к строке, но отладчик сказал, что выражение имеет побочные эффекты, и это не работает.

Правка: Получилось со строками! Надо было так:

<DisplayString>{start,[end-start]}</DisplayString>

#9
21:18, 28 фев. 2014

gammaker
Спасибо! Мне это пригодится. Просто пока в другом копаюсь. Если ещё что найдёшь интересное, пиши сюда.

#10
21:28, 28 фев. 2014

s3dworld
В той ссылке, которую я уже приводил, и так есть практически всё. Но мой случай не был описан, поэтому я так долго проковырялся. Так что статья из той ссылки + то, что я здесь написал, наверное содержат всё что нужно для добавления любого класса. Если всё это сразу знать, то всё делается за пару минут.

#11
22:54, 28 фев. 2014

>Так как от STL я отказался, и написал свой вектор
У меня похожая ситуация... Как на счёт опубликовать код (ну если там чуть более чем вектор)? :)

#12
0:22, 1 мар. 2014

FireFenix
> У меня похожая ситуация... Как на счёт опубликовать код (ну если там чуть более чем вектор)? :)
А смысл? Это не законченная вещь и ни на что не претендует. Там кроме как добавить в конец и удалить с начала ничего нет (я добавляю только во время необходимости функционал).

#13
6:22, 1 мар. 2014

s3dworld
> Там кроме как добавить в конец и удалить с начала ничего нет (я добавляю только во время необходимости функционал).
Я уже думал, там либа срослась, а у тебя только вектор Изображение
А то я тоже некоторые stl контейнеры переделал, некоторые переделал под стиль .net (мне он больше импонирует), думал у тебя похожая затея...

#14
9:57, 1 мар. 2014

FireFenix
> думал у тебя похожая затея...
У меня похожая. Подробнее смотри в моём профиле.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.