Збирання і тестування програм – ЧАСТИНА 1

У попередньому розділі обговорювалися команди Emacs, корисні для внесення змін до програми Ця глава має справу з командами, які допомагають у великому процесі розробки і супроводу програм

231  Запуск компіляторів в Emacs

Emacs може запускати компілятори для недіалогових мов, таких як Сі і Фортран, як підлеглі процеси, подаючи протокол помилок в буфер Emacs Він також може зробити розбір повідомлень про помилки і показати вам рядки вихідних текстів, де сталася помилка

M-x compile

Асинхронно запускає компілятор під управлінням Emacs, виводячи повідомлення про помилки в буфер * compilation *.

Mx grep Асинхронно запускає grep під управлінням Emacs, перераховуючи збіглися рядки в буфері * grep *.

M-x grep-find

Запускає grep через find з наданими користувачем аргументами,

направляючи висновок в буфер * grep *.

M-x kill-compilation

M-x kill-grep

Знищує працюють підпроцеси компіляції або grep

Щоб запустити make або іншу команду компіляції, виконайте Mx compile Ця команда зчитує командний рядок оболонки, використовуючи мінібуфер, і потім виконує цю командний рядок у підпорядкованій оболонці, поміщаючи висновок в буфер з імям

‘* Compilation *. В якості робочого каталогу для виконання цієї команди використовується каталог за замовчуванням поточного буфера, отже, компіляція проводиться в цьому каталозі

Коли зчитується командний рядок оболонки, зявляється мінібуфер, що містить командний рядок за умовчанням це команда, яку ви використовували при останньому застосуванні Mx compile Якщо ви наберете просто hRETi, То знову буде використана та ж сама командний рядок Для першої Mx compile за замовчуванням використовується make-k. Значення за замовчуванням береться із змінної compile-command якщо відповідна команда компіляції для файлу є чимось іншим, чи не make-k, то може бути корисно мати для цього файлу локальне значення compile-command (див Розділ 3125 [Змінні файлу], с 351)

Запуск компіляції показує буфер * compilation * в іншому вікні, але не вибирає його Рядок режиму цього буфера повідомляє вам, чи закінчилася компіляція, за допомогою слів run або exit в круглих дужках Ви не зобовязані тримати цей буфер видимим, компіляція триває в будь-якому випадку Поки компіляція триває, в рядках режиму всіх буферів зявляється слово Compiling. Якщо це слово зникає, компіляція закінчена

Якщо ви хочете бачити протокол компіляції в міру його появи, перейдіть в буфер * compilation * і перемістіть точку в його кінець Коли точка розташована в кінці, новий висновок процесу компіляції вставляється перед точкою, і вона залишається в кінці Якщо крапка не знаходиться в кінці цього буфера, вона залишається на своєму місці, тоді як подальше виведення компіляції додається в кінець буфера

Якщо ви встановите змінну compilation-scroll-output в значення, відмінне від nil, то буфер компіляції завжди прокручується, щоб показувати висновок у міру його появи

Щоб припинити процес компіляції, виконайте команду Mx kill-compilation Коли процес компіляції буде перерваний, рядок режиму буфера * compilation * зміниться, і в ній буде слово signal замість Run. Запуск нової компіляції також знищує будь-яку працюючу компіляцію, так як в один час може існувати тільки одна Однак Mx compile вимагає підтвердження перед фактичним знищенням вже запущеної компіляції

232  Пошук з Grep під Emacs

Точно так само, як ви запускаєте з Emacs компілятор, і потім звертаєтеся до рядків, де були помилки компіляції, ви можете запустити grep і потім звернутися до рядків, де були знайдені збіги Це працює шляхом інтерпретації повідомлень про збіги від grep як повідомлень про помилки.

Щоб зробити це, наберіть Mx grep і введіть командний рядок, що вказує, як потрібно запускати grep Використовуйте ті ж аргументи, які ви дали б grep при звичайному запуску: регулярний вираз у форматі grep (зазвичай в одиночних лапках, щоб скасувати особливий сенс спеціальних символів оболонки), за яким слідують імена файлів, в яких можна використовувати шаблони Висновок з grep йде в буфер

‘* Compilation *. Ви можете звернутися до совпавшімстрокам за допомогою Cx і hRETi,

як до помилок компіляції

Якщо ви задасте для Mx grep префіксний аргумент, вона знайде в околиці точки тег (див Розділ 2213 [Теги], с 224) і помістить його в команду grep за замовчуванням

Команда Mx grep-find схожа на Mx grep, але пропонує іншу командний рядок за замовчуванням – рядок, яка запускає find і grep, так що пошук проводиться в кожному файлі дерева каталогів Дивіться також команду find-grep-dired, Розділ 2815 [Пошук в Dired], с 300

233  Режим Compilation

У буфері * compilation * використовується особливий основний режим, режим Compilation, основна мета якого – надати зручний спосіб переглянути рядок вихідного тексту, де трапилася помилка

Cx Звернутися до позиції наступного повідомлення про помилку компіляції або сов-

падіння, знайденого grep

hRETi             Звернутися до позиції повідомлення про помилку, в якій знаходиться точка Ця команда застосовується в буфері компіляції

Mouse-2 Звернутися до позиції повідомлення про помилку, на якому ви клацнули

Ви можете звернутися до вихідного тексту для будь-якого конкретного повідомлення про помилку, перемістивши точку в буфері * compilation * до цього повідомлення і натиснувши hRET(Compilegoto-error) Або клацніть на цьому повідомленні про помилку Mouse-2 тоді вам не обовязково спочатку перемикатися в буфер * compilation *.

Щоб послідовно зробити граматичний розбір повідомлень компілятора про помилки, набирайте Cx (next-error) Знак, який стоїть після Cx – це зворотна лапка або акцент гравер, а не звичайна одиночна лапка Ця команда доступна у всіх буферах, а не тільки в буфері * compilation *; вона показує таке повідомлення про помилку вгорі одного вікна і текст, в якому знаходиться ця помилка, в іншому вікні

Коли Cx використовується перший раз після початку компіляції, вона пересувається до положення першої помилки Наступні використання Cx просувають вниз до наступних помилок Якщо ви звернулися до файлу по якомусь повідомленням про помилку за допомогою hRETi  або Mouse-2, наступні команди Cx просуваються з цього місця Коли Cx доходить до кінця буфера і не може знайти більше повідомлень, вона завершується неуспіхом і Emacs видає помилку

Cu Cx починає перегляд буфера * compilation * спочатку Це один із способів ще раз обробити один і той же набір помилок

Режим Compilation також перевизначає ключі hSPCі hDELдля прокрутки по цілому екрану, а Mn і Mp – для переміщення до наступного або попереднього повідомлення про помилку Ви також можете використовувати M-{і M-} для переміщення вгору і вниз до повідомлення про помилку для іншого вихідного файлу

Можливості режиму Compilation також доступні в другорядному режимі, званому Compilation Minor Він дозволяє вам розбирати повідомлення про помилки в будь-якому буфері, а не тільки в звичайному буфері для виведення протоколу компіляції Для включення цього другорядного режиму наберіть Mx compilation-minor-mode Це визначить ключі hRETі Mouse-2 як в основному режимі Compilation

Другорядний режим Compilation працює в будь-якому буфері, якщо вміст цього буфера має зрозумілий йому формат У буфері Rlogin (див Розділ 3026 [Дистанційна машина], с 329), другорядний режим Compilation автоматично отримує видалені вихідні файли по FTP (див Розділ 141 [Імена файлів], с 105)

234  Подоболочкі для компіляції

Emacs використовує для команди компіляції оболонку, але їй вказується, що вона повинна бути неінтерактивної Зокрема, це означає, що оболонка починається без підказки Якщо ви виявите, що буфер * Compilation * спотворюють ваші звичайні підказки оболонки, то це означає, що ви зробили помилку у вашому файлі ініціалізації оболонки, встановивши підказку, не враховуючи умов, коли вона не повинна зявлятися (Файл ініціалізації може називатися . Bashrc, . Profile, . Cshrc, . Shrc або ще як-небудь залежно від використовуваної вами оболонки) Файл ініціалізації оболонки повинен встановлювати підказку, тільки якщо підказка вже є Покажемо, як це потрібно робити в csh:

if ($prompt)  set  prompt = ..

А так це робиться в bash:

if [ &quot${PS1+set}&quot  = set  ]

then  PS1=.. fi

Можуть бути й інші речі, які ви повинні робити тільки в інтерактивній оболонці Для перевірки умови інтерактивного запуску ви можете використовувати такий же метод

Операційна система MS-DOS не підтримує асинхронні підпроцеси щоб якось обійти цей недолік, Mx compile в MS-DOS запускає команду компіляції синхронно Як наслідок, ви повинні дочекатися завершення цієї команди до того, як зможете зробити щось у Emacs Див Додаток C [MS-DOS], с 403

235  Запуск отладчиков в Emacs

Бібліотека GUD (Grand Unified Debugger1) надає інтерфейс до різних сім-

вільним отладчиков з Emacs Ми рекомендуємо відладчик GDB, який поширюється

1 Єдиний відладчик (Прим перекладача)

ється вільно, але ви також можете запускати DBX, SDB або XDB, якщо вони у вас є GUD може також служити інтерфейсом до Отладочная режиму Perl, отладчику Python PDB і JDB, отладчику Java

2351  Запуск GUD

Існує кілька команд для запуску відладчика, кожна відповідає конкурують-

ної програмі-отладчику

M-x gdb hRETфайл hRETi

Запускає GDB як подпроцесс Emacs Ця команда створює буфер для введення і виведення GDB і перемикає в нього Якщо буфер GDB вже існує, вона просто перемикає в цей буфер

M-x dbx hRETфайл hRETi

Аналогічно, але запускає DBX замість GDB

M-x xdb hRETфайл hRETi

Аналогічно, але запускає XDB, а не GDB Використовуйте змінну gud-xdbdirectories для завдання каталогів пошуку вихідних файлів

M-x sdb hRETфайл hRETi

Аналогічно, але запускає SDB, а не GDB

Деякі версії SDB не називають у своїх повідомленнях імена вихідних файлів Коли ви використовуйте їх, у вас повинна бути створена правильна таблиця тегів (див Розділ 2213 [Теги], с 224), щоб GUD міг знайти функції у вихідних файлах Якщо ви не зверталися до таблиці тегів таблиця тегів не містить одну з функцій, ви отримаєте повідомлення, яке говорить The sdb support requires a valid tags table to work 2 Якщо це трапилося, створіть в робочому каталозі правильну таблицю тегів і спробуйте знову

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*