Отладка программ в (g)Vim

Написал Lex Luthor, в Статьи » Linux.
Введение

В отличие от emacs, который поддерживает отладку "искаропки", редактор Vim или его графическая версия по умолчанию не имеют средств отладки С/С++ программ. Однако, Vim в смысле отладки тоже не стоит на месте. Добрые люди пишут различные программы, плагины, патчи для поддержки отладчика GDB в (g)Vim. Многие из них уже выложены на официальный сайт программы: http://Vim.Org/scripts/.... Как видно, многие из этих утилит уже устарели и имеют дату последнего обновления более двух лет назад.

В этой статье будет рассмотрен проект Clewn. Это один из самых старых, но всё ещё активно развивающихся проектов. Clewn предоставляет полную поддержку отладчика GDB в редакторе Vim: точки останова, просмотр переменных, управление GDB напрямую командами и т.д. Это возможно сделать двумя способами: через отдельную программу Clewn, или через VimGDB патч для Vim. Clewn контролирует Vim через netBeans сокет, запускается и выполняется отдельно, сообщая команды Vim. Однако для того, что бы использовать Clewn, Vim должен быть скомпиллирован с поддержкой netBeans. Если Clewn использовать не получается - можно использовать VimGDB. Он накладывается на Vim до его сборки и выполнен в виде дополнительной опции компиляции. И Clewn и VimGDB используют один и тот же функциональный код, так что результат будет приблизительно один и тот же.

Установка Clewn

Установка Clewn абсолютно стандартна:

./configure && su -c 'make && make install
Возможно, читатель найдёт для себя какие-нибудь интересные подробности на страничке помощи по установке Clewn. Там же мы узнаём, что для удалённой отладки (в том числе, и на локальной машине smile) нужно ввести следующие команды:
host:    gvim -c "run clewn.vim" -nb:target_ip_address<br />    target:    clewn -x pathnames_map -nb:target_ip_address

Установка VimGDB

Если же установить Clewn по каким-либо причинам не удалось, либо читатель просто решил установить поддержку GDB через VimGDB патч, то нам опять же поможет документ помощи по установке. На этот раз, его VimGDB секция. А именно, для начала архивы с Vim и VimGDB нужно распаковать:

tar xjf vim-7.1.tar.bz2<br />    tar xzf vimgdb71-1.12.tar.gz
А потом выполнить команду, применяющую патч:
<pre>    patch -d vim71 --backup -p0 < vimgdb/vim71.diff</pre>
После этого переходим в директорию vim71/src и собираем Vim:
<pre>    cd vim71/src<br />        make                собрать vim<br />        make install        установить vim (могут понадобиться root привилегии)</pre>
Внимание! Выполнять ./configure не нужно! В данном случае этот сценарий выполнится корректно автоматически. Но если очень нужно указать свои опции компиляции, то нужно не забыть опцию --enable-gdb.

После этого нужно распаковать архив vimgdb_runtime.tgz в свою runtime-директорию. Например, ~/.vim/. Чтобы наверняка её узнать, в запущенном Vim можно выполнить команду

<pre>    :set runtimepath?</pre>
После этого шага runtime-директория должна содержать следующие файлы:
<pre>    doc/gdb.txt<br />    macros/gdb_mappings.vim<br />    syntax/gdb.vim<br />    syntax/gdbvim.vim<br />    syntax/gdbvar.vim</pre>
Далее запускаем Vim и вводим команду ":helptags .". Теперь VimGDB полностью установлен и можно читать по нему документацию, введя команду ":help vimgdb".

Установка VimGDB в Gentoo

В Gentoo руками нужно делать намного меньше. Большую часть работы система может выполнить за Вас. Также, система в добавок пропатчит Vim некоторыми нужными патчами. Для начала создадим локальное дерево портежей. Далее добавляем туда несколько ebuild-файлов, которые можно скачать или ТУТ. После этого для каждого ebuild-файл нужно создать манифест:

<pre>    ebuild ./vim-7.1.087.ebuild manifest<br />    ebuild ./gvim-7.1.087.ebuild manifest<br />    ...<br /></pre>
Кстати, нужно не забыть предварительно скопировать файлы из подпапок files оригинальных ebuild'ов (/usr/portage/app-editors/vim/files/ и т.п. для gvim), иначе не соберётся. Если всё-таки забыли - нужно скопировать файлы и перегенерировать манифесты. Дигесты создаются автоматичеки при создании манифестов. Также автоматически докачиваются файлы, которых нет в директории distfiles. Теперь добавляем в /etc/portage/package.use USE-флаги "gdb" для пакетов vim и gvim. Всё, теперь можно устанавливать:
<pre>    emerge -av vim gvim</pre></p>

Подготовка к запуску

Возможно, перед запуском (g)Vim читатель захочет добавить себе в .vimrc следующие опции:

<pre>    :syntax enable                      " включить подсветку синтаксиса<br />    :set previewheight=12               " установить стартовую высоту окна GDB<br />    :run macros/gdb_mappings.vim        " автоматический запуск макроса gdb_mappings<br />    :set asm=0                          " не показывать ассемблерные коды<br />    :set gdbprg=gdb_invocation          " установить строку вызова GDB (по умолчанию 'gdb')</pre>
Каждый ставит опции по своему усмотрению. Но обычно полезен автоматический запуск макроса, отвечающего за комбинации клавиш для GDB. По умолчанию клавиши сразу не переназначаются, т.е. автозапуск этого макроса абсолютно не мешает. Также полезно отключить отображение ассемблерных кодов, т.к., например, они отображаются каждый раз при шаге на последнюю исполняемую строку файла, при прыжках на функции, исходного кода которых у читателя нет и т.п.

Запуск

Теперь запускаем Vim и загружаем в него нужный исходник. Его нужно откомпилировать. Компиляцию можно либо забиндить на какую-либо комбинацию клавиш в Vim, либо откомпилировать исходник непосредственно в консоли. Например, командой:

<pre>    gcc -g3 </pre>
Она по умолчанию создаёт исполняемый файл a.out. Параметр g3 отвечает за отладочную информацию, которая и будет использоваться в GDB.

Теперь опять вернёмся в Vim. Для начала, запустим скрипт macros/gdb_mappings.vim :

<pre>    :run macros/gdb_mappings.vim</pre>
Теперь можно нажать F7 и нужные комбинации клавиши будут применены.

Запустим сам GDB. Это можно сделать следующей командой:

<pre>    :call gdb("file a.out")</pre>
Причём, если скомпилированный файл называется не a.out и лежит не в текущей директории, то нужно указать именно нужный файл. Если всё сделано правильно, окно автоматически горизонтально разделится на 2. В верхнем будут идти сообщения GDB. Если всё нормально, GDB должен сказать что-то похожее на:
<pre>(gdb) file a.out<br />  Reading symbols from /home/dxp/a.out...done.<br />  Using host libthread_db library "/lib/libthread_db.so.1".</pre>
Всё, GDB запущен. Теперь можно приступать непосредственно к отладке.

Отладка

Во время работы с Clewn/VimGDB очень помогает файл помощи (:help vimgdb). Там же можно узнать основные комбинации клавиш, установленные по умолчанию. Нас интересует запуск программы (Shift+R), установка точки останова (Ctrl+B), шаг с заходом в функции (Shift+S), следующая строка (Ctrl+N).

Первым делам устанавливаем нужные точки останова. После этого можно запустить программу. Выполнение её остановится на первой встретившейся точке останова. После этого можно использовать клавиши шагов (Shift+S, Ctrl+N и т.п.)

Однако что за отладка без просмотра значения переменных? Для того, чтобы отобразить значения переменных для начала вертикально разделим наше окно (Ctrl+W V). Выберем то окно, где будут отображаться переменные. После этого вводим команду:

<pre>    :e gdb-variables</pre>
После этого в окне должен отобразиться пустой буфер. Переменных нет, т.к. их ещё нужно добавить. Добавляются переменные следующим образом:
<pre>    :call gdb("createvar i")</pre>
После выполнения этой команды в буфер отображения будет добавлена переменная с именем i. Теперь можно продолжить пошаговую отладку. И значение переменной будет изменяться в режиме реального времени.

Просматривать значения переменных можно гораздо удобнее. Например, если в нормальном режиме навести курсор на переменную и нажать Ctrl+P, то в окне GDB отобразится её значение. Если в визуальном режиме(переход в него из нормального - клавишей v или выделением текста мышью) навести курсор на переменную, или выделить её, после чего нажать Ctrl+P, то переменная автоматически создастся и отобразится в буфере gdb-variables.

Иногда в процессе отладки нужно на ходу изменить значение переменной. Для этого нужно выполнить команду, типа:

<pre>   :call gdb("set variable i = 5")</pre>
После этого значение переменной успешно изменится. Это отобразится также в буфере переменных.

Редактирование значения переменной тоже можно сделать визуальным. Для этого IMDagger советует добавить в свой (g)vimrc следующую строку:

   nmap <F4 /> :let read_v = inputdialog("Value of " . expand("<cword />"),&sw)<CR />:if read_v != ""<CR />:call gdb("set variable " . expand("<cword />") . " = " . read_v)<CR />:endif<CR />
Теперь для того, чтобы изменить значение переменной, в нормальном режиме достаточно навести на неё курсор, нажать F4 и в появившемся диалоговом окошке ввести новое значение.

Замечания

Во время работы были замечены некоторые особенности. А именно: - перед использованием пошаговой отладки программу обязательно нужно запустить. Точнее, при отладке программа запускается всегда. Но обычно в средах разработки при нажатии комбинации клавиш "Шаг на следующую строку" среда автоматически запускает программу и "шагает" на 1 строку. Здесь нужно не забывать ставить точки останова и чтобы дойти до первой нужно нажать Shift+R (запустить программу). - в моей сборке переменные, отображаемые в буфере gdb-variables, действительны на период только одного запуска программы. Т.е. при перезапуске (например, когда прошли все шаги выполнения и программа корректно завершилась) переменные также нужно пересоздать, т.к. имена ранее добавленных переменных отображаются, а значения - нет. Однако у некоторых людей всё нормально работает.

Эта статья будет постепенно совершенствоваться и дополняться. Надеюсь, с Вашей помощью. Также в процессе перевода справка VimgGDB на русский язык.

А вот как выглядит отладка в GVim:

'Отладка

Автор статьи: Dem@nXP
Web: http://demanxp.net.ru
E-Mail: Dem[at]nXP[dot]net[dot]ru
(заменить [at] на "@", [dot] на ".")
ICQ: 606986
#1 reklamkin |  


----------------------------
?
! .


-
:

# ,
# , , email,
# ftp, pr, , socks, proxy
# popunder, sms,
# rambler, gmail
# ftp, direct admin
# , , ,
# cms ,
# , ,

.
,
icq:421156969


----------------------------
?
! .


-
:

- ,
- , , email,
- ftp, pr, , socks, proxy
- popunder, sms,
- rambler, gmail, yandex
- ftp, direct admin
- , , ,
- cms ,
- , ,

.
,
icq:421156969
Дата публикации: 22 июля 2009 21:44 | ICQ: --
цитировать
#2 podcepit |  

Узнай [url=http://podcepit.narod.ru]Как подцепить девушку[/url] где угодно.
Дата публикации: 12 августа 2009 13:02 | ICQ: --
цитировать
#3 Tinkerbabe |  

Замечательно пишете. Приятно читать Ваши статьи.
Дата публикации: 29 марта 2010 12:28 | ICQ: --
цитировать
#4 uambatyzsoa |  

sTh4XF <a href="http://hhjhecapmuav.com/">hhjhecapmua
v</a>, [url=http://kuydafxmlijb.com/]kuydafxmlijb[/url], [link=http://zmertnqaxahg.com/]zmertnqaxahg[/link], http://utwhtmblmspy.com/
Дата публикации: 5 апреля 2011 20:30 | ICQ: --
цитировать
#5 mylove |  

Елки, для профессионалов статья
Дата публикации: 20 июня 2011 01:50 | ICQ: --
цитировать
#6 Pyncexceers |  

seth thomas fashion calendar clock identifying http://luxefashion.us/c-n-c-costume-national-brand167.html todd hutchings fashion show pictures 1116789
Дата публикации: 28 июня 2011 14:08 | ICQ: --
цитировать
#7 Trixypixyx |  

building credit fast. building credit for college students. [url=http://carloans4badcredit.com/content/loan-people-retai
l-automobile-first-time]fha loans requirements[/url]. building credit for teen. building credit for your business, building credit high score,
Дата публикации: 30 июня 2011 19:12 | ICQ: --
цитировать

average credit score and after bankruptcy. average credit score bad-credit. [url=http://lowcreditpersonalloans.com/]quick fast cash loans[/url]. average credit score by state. average credit score college student, average credit score during bankruptcy,
Дата публикации: 11 июля 2011 14:13 | ICQ: --
цитировать

Online pharmacies, buy tramadol, buy vicodin, buy valium without prescriptions.

[url=http://www.pharmacyreviewer.com/?q=Tramadol&option=com_
medicine&view=search]Buy Tramadol no prescription[/url]
Дата публикации: 23 июля 2011 09:12 | ICQ: --
цитировать
#10 Lixakozelkov |  

hawaii state personal loans m i bank credit cards. consumer credit counseling blaine minnesoty, [url=http://www.exceptionalcraft.com/index.php?topic=7.new#n
ew ]government refinance student loans[/url]. should you use consumer credit testimonials credit cards accepted by ebay.

pse g federal credit union harbor credit card consolidation. money tree payday loan credit, [url=http://smksapg.edu.my/eforum/index.php?topic=3.new#new ]personal loans on line[/url]. bank of amwerica credit cards fixed rate low interest credit cards.

uk personal loans insurance school employees credit uniom. foothill ferderal credit, [url=http://bodydept.home.pl/sklep-en/forum/viewtopic.php?f=
19&t=104198 ]southlake texas home loans[/url]. credit card processing equipment encore merchant consolidated credit card bills.
Дата публикации: 28 июля 2011 09:34 | ICQ: --
цитировать
#11 Lixakozelkov |  

credit card expats pay day loans locations in va. buying land bad credit, [url=http://ecc71-ru.1gb.ru/forum/index.php?topic=5806.new#n
ew ]loans uk from personal online[/url]. credit card systems, iba home loans.

credit card garbber credit union student. scott credit union in illinois, [url=http://doodog.net/smf/index.php?topic=517.new#new ]cheapest rehome loans in britain[/url]. unsecured loans unemployed people, home loans subprime.

cash loans sandwell home loans the hot new product. baygulf credit unioncom, [url=http://harvestfarmfamily.com/valuesforum/index.php?topi
c=578.new#new ]fast auto loans kingman az[/url]. existing mortgage loans florida, totally free credit bureau reports.

using bank debit card in italy, associates credit card services. citicorp credit services in, [url=http://is-model10.com/webborad/index.php?topic=60.new#n
ew ]home builders construction over run loans[/url]. us credit repair letter cell phones poor credit.
Дата публикации: 29 июля 2011 00:48 | ICQ: --
цитировать
#12 Siromasher |  

[URL=http://freeloansmoney.com][IMG]http://www.offshore-serv
ices.biz/images/apply-now-for-thetabiz-global-bank-account-i
ntroduction.jpg[/IMG][/URL]


is countrywide required to modify loans disclosure of secured loans. credit card benefits, [url=http://freeloansmoney.com/content/how-much-can-i-borrow
-title-loans/ ]easy cash loans[/url]. grants nigerian student loans credit valley eyecare.

[URL=http://freeloansmoney.com][IMG]http://hotcashadvance.fi
les.wordpress.com/2010/10/cashnow.png[/IMG][/URL]


no credit check bank accounts uk dept education direct loans. glenview illinois municipality credit ratings, [url=http://rilhein.ligool.com/foro/index.php?topic=43.new#n
ew ]how to get loan[/url]. types of home loans in california mortgage arm loans expiring.
Дата публикации: 31 июля 2011 02:19 | ICQ: --
цитировать
#13 RuilMcitbut |  

Здравствуйте,

Позвольте дать всем вам [url=http://ehh.ru]журнал с приколами и юморными фотками[/url], чудесное настроение, а так же красивая улыбка вас не оставят до конца дня.
Дата публикации: 7 августа 2011 08:11 | ICQ: --
цитировать
#14 Embomiamegeme |  

Производить ювелирные изделия - само по себе ювелирная работа. Важно не просто создавать привлекательные украшения, нужно по-настоящему любить свою работу и относиться к ней с полной ответственностью.
[url=http://www.figgery.com/forum/]ювелирное[/url]
[url=http://www.figgery.com/forum/forumdisplay.php?f=2]ювели
рные изделия[/url]
[url=http://www.figgery.com/forum/forumdisplay.php?f=2]ювели
рные украшения[/url]
[url=http://www.figgery.com/forum/forumdisplay.php?f=3]ювели
рный интернет магазин[/url]
Дата публикации: 13 августа 2011 10:13 | ICQ: --
цитировать
#15 chadayarock |  

Форумы интернета

[url=http://www.bestauction.ru]seo форум заработок в сети[/url]


[url=http://www.bestauction.ru/forumdisplay.php?f=56]форум дорвейщика[/url]

[url=http://www.sc1.ru/]форум дача[/url]

[url=http://www.klubpokupok.ru/]форум покупателей[/url]
[url=http://www.sc1.ru/forum/]форум стройка[/url]
[url=http://www.sc1.ru/forum/forumdisplay.php?f=65]купить печку[/url]
[url=http://www.sc1.ru/forum/forumdisplay.php?f=66]бани чертежи[/url]
[url=http://www.sc1.ru/forum/forumdisplay.php?f=64]дом на даче[/url]
Дата публикации: 14 августа 2011 22:52 | ICQ: --
цитировать

When you're considering getting a personal loan, one thing that may daunt you is the requirements for doing so.
[url=http://onlineexpressloans.com/]bad credit loans[/url]
After all, you're probably familiar with the traditional loan process, where people seem to send away their life histories and still get rejected most of the time.
Дата публикации: 16 августа 2011 01:43 | ICQ: --
цитировать
#17 LoansUSAMike |  

college student credit score 800 secured finance poor credit. sainsbury credit card online, [url=http://loansusa4you.com/content/why-do-personal-secured
-loans ]loans for unemployed[/url]. shinedown second chance credits new jersey bank loan bad credit.
Дата публикации: 17 августа 2011 19:25 | ICQ: --
цитировать
#18 Etencehoott |  

Привет,

Ежели нечем предпринимать, то посетите [url=http://gav-gav.info]gav-gav.info[/url], где много развлечений и фото приколов.
Особенно онравятся комиксы из фильмов и демотиваторы на деликатную тему, заходите на http://gav-gav.info и будет вам хорошо.
Дата публикации: 21 августа 2011 17:06 | ICQ: --
цитировать
#19 ladychance |  

На нашем сайте представлена модная женская одежда, превосходные акссесуары.
[url=http://www.ladychance.ru/]женская одежда купить[/url]
[url=http://www.ladychance.ru/category/futbolki/]магазин футболок[/url]
[url=http://www.ladychance.ru/category/platja-bez-rukavov-le
to/]платья дёшево[/url]
[url=http://www.ladychance.ru/category/vechernie-platja/]жен
ские вечерние платья купить вечернее платье[/url]
[url=http://www.ladychance.ru/category/sportivnaja-odezhda/]
женские костюмы[/url]
Мы доставляем женскую одежду непосредственно с фабрики производителя в Китае.
Поэтому можем радовать своих покупателей низкими ценами на одежду и аксессуары.
Дата публикации: 21 августа 2011 23:53 | ICQ: --
цитировать
#20 mourgymow |  

Scams dating russian, [url=http://dating-hermleigh.vvsspeed.com/]dating hermleigh[/url]. Kristen pim 31 dating myspace.
South koran dating site. Dating cape porpoise, [url=http://amature-match-dating.vvsspeed.com/]amature match dating[/url].
Desperate girls dating, [url=http://dating-forest-oaks.vvsspeed.com/]dating forest oaks[/url]. Single parent dating meridian idaho.
Romantic dating sites. Dating fort lyon, [url=http://dating-newgulf.vvsspeed.com/]dating newgulf[/url].
Sex dating in magherafelt county londonderry, [url=http://dating-salt-flat.vvsspeed.com/]dating salt flat[/url]. Completely free dating for los angeles.
Дата публикации: 23 августа 2011 07:33 | ICQ: --
цитировать
#21 FUPATTAZY |  

Самые свежие новости мира и России вы можете найти в сайте http://wlna.info/
Дата публикации: 27 августа 2011 11:05 | ICQ: --
цитировать

Добавить комментарий


Включите эту картинку для отображения кода безопасности
обновить код



 

Лучшие новости

Наш опрос

Мы в интернете