Як ви налагоджуєте без IDE? [зачинено]


61

Кожного разу, коли я шукаю IDE (зараз я розмовляю з Go), я знаходжу повну людину, яка рекомендує Vi, Emacs, Notepad ++ тощо.

Я ніколи не займався розробкою за межами IDE; Напевно, я був зіпсований. Як ви налагоджуєте без IDE? Ви обмежені лише веденням журналу?


53
Налагодження програми Oldschool printf, наскільки я знаю :-)
Ендрю Уолтерс

25
За дні до IDE ми використовували налагоджувачі, які або приєднувались до запущеного процесу, або обертали процес, щоб дозволити крокувати або самоаналізу стану програми. (gdb, perl -d тощо). Інтеграція налагоджувачів у IDE робить його зручнішим, але вони існують окремо. Збій налагоджувачів, ведення журналу ... просто переконайтеся, що журнал не змінює стан програми, коли він буде вилучений та повторно вводить помилку, яку ви намагалися знайти.

7
налагоджувач командного рядка (на їх основі створено декілька налагоджувачів IDE)
храповик виродка

14
Повільно і обережно.
FrustratedWithFormsDesigner

3
Хоча відбитки досить поширені, його використання може приховати деякі помилки, які є більш тонкими, такі як умови перегонів.
Джеймс

Відповіді:


86

За допомогою налагоджувача. Здебільшого, це також те, що IDE робить за кадром - це просто перетворює досвід на графічний інтерфейс.

У Unix одним з найпоширеніших налагоджувачів є GNU gdb, який значною мірою витіснив попередні налагоджувачі Unix, такі як dbx.

Щоб отримати уявлення про те, як налагодження виглядає / відчуває себе в командному рядку, ви можете переглянути посібник з gdb .

Як і в інших областях, використання налагоджувача з командного рядка вимагає вивчення синтаксису та набору команд, але приносить із собою велику гнучкість та можливість написання. З іншого боку, якщо вам вже зручно працювати в такому редакторі, як vim або emacs, ви можете виявити, що у вашому улюбленому редакторі є плагін для вашого улюбленого налагоджувача.


18
+1 для "За допомогою налагоджувача". Я в IDE означає "Інтегральний" :)
joshin4colours

1
Якщо ви пишете на Python, pdbнасправді кращий за будь-який відладчик IDE, який я знайшов.
asthasr

1
@syrion І ipdbкращий за це;)
Ізката

Чудово - я не знав, що існує, Ізката. Дякую.
asthasr

@ joshin4colours інтегровано! = колекція, ні?
Коул Джонсон

35

Я кілька років використовував налагоджувач, коли писав графічні драйвери. У мене був другий комп’ютер, який запускав налагоджувальний пристрій проти першого (адже екран у первинному комп’ютері не працював, коли графічний драйвер був зламаний). Важливо було зупинити код і перейти до місця, коли я повісив обладнання, щоб я знав, що відбувається.

Що стосується суто програмних проблем, я вважаю, що думати про проблему та перевіряти систему, щоб дізнатися більше про проблему, набагато корисніше, ніж переходити через код рядок за рядком. З твердженнями про друк у мене є список всього, що сталося в командному рядку або файлі журналу, що я можу переглядати і реконструювати те, що сталося, рухаючись назад і вперед легше, ніж я коли-небудь міг за допомогою налагоджувача.

Найскладніші помилки зазвичай вирішуються, розуміючи проблему подалі від комп'ютера. Іноді з аркушем паперу або дошкою, а іноді відповідь виявляється, коли я роблю щось інше. Найвибагливіші помилки вирішуються, уважно переглядаючи код, як грати Where's Waldo. Все інше здається найпростішим з операторами друку чи виписуванням журналів.

У різних людей різні стилі, і різні стилі краще для різних завдань. Операції друку не обов'язково є кроком вниз від налагоджувача. Залежно від того, що ти робиш, вони можуть бути навіть кращими. Особливо мовою, яка не має нативного налагоджувача (чи йде?).


7
Це. Абсолютно це. Я вважаю, що принаймні для мене проблеми, як правило, є логічними помилками або взаємодіями, які налагоджувач більше не зробить очевидними. Ви повинні зрозуміти, чому щось не так, а не тільки те, що відбувається .
Підроблене ім’я

2
+1 повністю для going backwards. У мене часто є досвід: "Ей, чекайте, хвилина, це не правильне значення! Як це стало це ?", І мені потрібно читати код і повертатись назад уперед. Налагоджувачі погано відстають назад.
Ізката

Так, gdb добре підходить для вивчення викинутого ядра, але в таких ситуаціях я виявив, що безоплатно використання заяв про друк справді допомогло.
Брайан

Налагоджувачі корисні, але ефемерні. Завдяки хорошій системі ведення журналу, я можу створити свою сесію налагодження. Використовуйте налагоджувач, щоб допомогти зрозуміти ситуацію, доповнити виписки друку, щоб зробити сеанс налагодження постійним. Я вважаю, що з часом все менше і менше
судимось

Так, роздуми за допомогою аркуша паперу чи дошки або просто у вас в голові - це найкращий спосіб налагодження. Це часто виправляє ваш процес мислення. Налагодження іноді - це простий вихід, який може не вирішити оригінальну проблему, чому помилки трапляються у вашій програмі :)
Nishant,

11

Деякі користуються gdb у командному рядку чи плагіні . Також є gdb, як DDD, окремі передні GUI . Залежно від вашої мови існують індивідуальні графічні інтерфейси налагодження, такі як Winpdb для python, або jswat для Java. Оскільки ці проекти зосереджені лише на налагодженні, вони часто перевершують інтегровані налагоджувачі.

Інший брудний маленький секрет щодо IDE - всі вони варті їх солі. Ви можете вказати спеціальний редактор, тому ви можете використовувати частини IDE для певних завдань, але використовувати гідний редактор для редагування. Не рідкість лише запускати IDE, щоб використовувати його налагоджувач, особливо якщо саме цим користуються ваші колеги.


1
+1 Інший варіант, звичайно, - встановити кольорову схему та вкладки клавіш у редакторі IDE, і зробити вигляд :)
darvids0n

1
@ darvids0n, я використовую IDE протягом чогось більше двадцяти років, і я все ж маю знайти його з редактором, який навіть починає натякати на думки про, можливо, колись натякаючи, що це може колись наступного століття подумати про спробу почати спробувати потримайте свічку до GNU Emacs.
Джон Р. Стром

6

Деякі мови пропонують REPL - тобто ви можете писати та виконувати код за рядком під час його написання, що може бути першим кроком у перевірці фрагмента коду. Багато з них також пропонують засоби налагодження. GHC для Haskell поставляється з GHCi, який можна використовувати для інтерактивної налагодження програми в командному рядку, як і IDE.


2

Я не розумію, чому існує відраза до налагодження із застосуванням операторів printf. Був час, коли потрібно було перекомпілювати і зв’язати програму занадто багато часу, але сьогодні це займає лише кілька секунд. Мені дуже легко налагоджувати, використовуючи тип виводу cout, printf, qDebug () тощо. Виписки Printf дають вам історію запуску всього, що робила програма, яку ви можете проаналізувати після факту, тоді як запуск у відладчику змушує вас вручну запам'ятати потік програми під час її запуску. За допомогою printf's ви можете конвертувати значення змінних у конкретні одиниці, відображати їх у шістнадцятковій, десятковій та інші. Виписки printf можуть перелічувати імена підпрограм та змінних, а також номери рядків. Ви можете перелічити лише певні елементи масиву залежно від інших змінних. Ви можете слідувати непрямими. Ви можете керувати висновком дуже легко, розміщуйте лічильники, друкуйте лише певний час через цикл, додайте та видаляйте оператори друку під час налагодження, маєте різні рівні налагодження виводу, записуйте у файли тощо. Набагато простіше бачити історію програми, записану у файл, ніж спробуйте запам’ятати всі місця, через які ви переходили вручну, і, можливо, доведеться записати вміст змінних, коли вони змінюються протягом часу, щоб виявити, що зробила програма. І нарешті, за допомогою операторів printf ви можете залишити їх назавжди, увімкнути та вимкнути для подальшої налагодження. s набагато простіше бачити історію вашої програми, записаної у файл, ніж намагатися запам’ятати всі місця, через які ви переходили вручну, і, можливо, доведеться записувати вміст змінних, коли вони змінюються протягом часу, щоб дізнатися, що програма зроблено. І нарешті, за допомогою операторів printf ви можете залишити їх назавжди, увімкнути та вимкнути для подальшої налагодження. s набагато простіше бачити історію вашої програми, записаної у файл, ніж намагатися запам’ятати всі місця, через які ви переходили вручну, і, можливо, доведеться записувати вміст змінних, коли вони змінюються протягом часу, щоб дізнатися, що програма зроблено. І нарешті, за допомогою операторів printf ви можете залишити їх назавжди, увімкнути та вимкнути для подальшої налагодження.


3
"Був час, коли потрібно було перекомпілювати і зв’язати програму занадто багато часу, але сьогодні це займає всього кілька секунд". Залежить від вашої мови та розміру проекту. Якщо я поміняю файл заголовка в своєму поточному проекті, для відновлення на 32-центральному процесорі з 256 ГБ оперативної пам’яті знадобиться 65 хвилин (я не жартую)
Неманья Трифунович

У людей немає «відрази» до налагодження з друкованими висловлюваннями, вони просто віддають перевагу налагоджувачу. Я знаю набагато більше "printf людей", які ніколи не використовують налагоджувачі, ніж "люди налагодження", які ніколи не налагоджують за допомогою printfs.
Карл Білефельдт

1
Напрочуд важко використовувати відладчик для достатньо розподіленої системи, але можна (з деякою неточністю через синхронізацію синхронізації) корелювати журнали. Якщо ваша програмна система складається з двійкових файлів, що працюють на 100 різних машинах, журнали / "printf налагодження" можуть бути простішими, ніж використання налагоджувачів і намагання тримати все на достатньому етапі блокування, щоб не створювати інших проблем.
Ватін

2

jimwise досить добре відповів на це питання, але я подумав, що слід додати, що якщо ви вирішите працювати без повного IDE, відладчик командного рядка Microsoft для Windows називається CDB . CDB поставляється з декількома іншими інструментами, включаючи WinDBG, що є еквівалентом GUI, коли ви завантажуєте SDK для Windows.


4
Ви можете, будь ласка, пояснити більш детально, як це відповідає на поставлене запитання?
гнат

Ти маєш рацію, сама по собі вона не відповідає на питання. Я вважав, що відповідь @ jimwise була гарною відповіддю на питання, але не містила жодної інформації про те, де знайти налагоджувач командного рядка для Windows. Тож я зрозумів, що буду брати додаткову відповідь для тих, хто стикається з цим, і цікавлюсь, як це зробити в Windows. Я оновлю свою відповідь, щоб сказати якомога більше.
Дрю Марш

2

Я зазвичай не використовую налагоджувач, можливо, раз на пару тижнів, але це не перше, на що я йду.

Найважливіший інструмент у моїй роботі настільки всюдисущий, що я майже забув згадати про це - стеження слідів. Понад 90% проблем, з якими я стикаюся, можна вирішити, вивчивши слід стека. Цей інструмент не завжди дуже корисний в залежності від вашої мови, але коли вони добре реалізовані мовою, вони можуть заощадити вам дивовижну кількість часу.

Я думаю, другий найпоширеніший спосіб виявлення простих проблем - це, мабуть, код, який я щойно змінив. Я запускаю одиничні тести досить часто, тому я, як правило, знаю, що саме я зламав.

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

У вас не завжди під рукою налагоджувач. У виробництві може бути неможливо запустити відладчик (Heck, може бути неможливий доступ до виробничих машин, крім журналів, залежно від того, наскільки захищена ваша компанія). Існують також мови, коли підключення налагоджувача займає занадто багато часу, або, можливо, просто немає хороших налагоджувачів.

Якщо ви кодували весь час за допомогою логіки та журналу налагодження / відстеження рівня, просто ви можете перевірити ваші відмінні заяви журналу (можливо, підвищення рівня журналу), щоб з'ясувати проблему, навіть не звертаючись до обладнання.

Хоча я думаю, що налагоджувачі - це потужний інструмент, не дозволяйте їм бути єдиним інструментом у вашій панелі інструментів!


1

Немає причини, чому ви не можете використовувати налагоджувач у IDE поряд із окремим текстовим редактором. Раніше я використовував! Zap для редагування, JBuilder для налагодження на іншій машині та сервер файлів у підвалі. Традиційно налагоджувачі були окремими програмами без перетягування IDE, і це теж працює.

Варто зазначити, що всебічне тестування витісняє налагодження. Варто розглянути повідомлення про помилку як помилку в тестуванні, а не в коді.

Там також printf. Це може бути корисно створити велику кількість "журналів" та пошукати її, а не зупинятися на кожному рядку. Я вважаю особливо корисним, якщо ви можете змінювати класи бібліотек, які ви не змогли б змінити у виробництві, наприклад, використовуючи -Xbootclasspath/p:для злому класи бібліотеки Java.


"Варто зазначити, що всебічне тестування витісняє налагодження." - Я б сказав, скорочення, а не «витіснення». Існують певні випадки, коли запуск коду через налагоджувач вигідний, навіть при виконанні TDD - наприклад, коли тест дає абсолютно несподіваний результат, точно дізнатися, де він пішов не так, може бути дуже корисним - правда, якщо це не в маленькому шматку коду, який ви щойно написали, це означає, що ви пропустили кращий випадок у попередньому тестуванні, але це трапляється ...
Jules

1

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

Ви можете використовувати pudb, який представляє собою консоль, заснований на простому інтерфейсі користувача. Ви можете вибрати бажаний налагоджувач, наприклад pdb або ipdb, якщо ви хочете ввести REPL та вивчити більш детально.

Також перегляньте PythonDebuggingTools Wiki на наявність всебічнішої колекції інструментів.


Первісне питання стосувалося Go, а не Python.
TMN

Правильно, я якось пропустив це. Він з’явився в моєму пошуку, коли я перевіряв налагоджувач Python.
Нішант
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.