Когда использовать отладчик Python - PullRequest
5 голосов
/ 08 октября 2008

Поскольку Python является динамическим интерпретируемым языком, вам не нужно компилировать код перед его запуском. Следовательно, очень просто написать свой код, запустить его, посмотреть, какие проблемы возникают, и исправить их. Использование горячих клавиш или макросов может сделать это невероятно быстрым.

Итак, так как очень легко сразу увидеть вывод вашей программы и любые ошибки, которые могут возникнуть, я еще не использовал инструмент отладчика. Какие ситуации могут потребовать использования реального отладчика по сравнению с методом, который я сейчас использую?

Я хотел бы знать, прежде чем попасть в ситуацию и расстроиться, потому что не знаю, как решить проблему.

Ответы [ 6 ]

8 голосов
/ 08 октября 2008

За 30 лет программирования я использовал отладчик ровно 4 раза. Все четыре раза нужно было прочитать файл core, полученный в результате сбоя программы на Си, чтобы найти информацию трассировки, которая там закопана.

Я не думаю, что отладчики сильно помогают, даже на скомпилированных языках. Многим нравятся отладчики, есть некоторые причины для их использования, я уверен, или люди не будут тратить на них такую ​​любовь и заботу.

Вот в чем дело - программное обеспечение - это захват знаний .

Да, он должен работать. Что еще более важно, однако, программное обеспечение имеет значение .

Это не обвинение в вашем использовании отладчика. Тем не менее, я обнаружил, что люди, которые полагаются на отладку, иногда создают действительно странный код и не имеют веских оснований для того, что означает Они могут только сказать: «Это может быть взлом, но это работает».

Мое предложение по отладчикам: "Не беспокойся".

"Но что, если я совершенно тупой?" Вы спрашиваете: "Должен ли я узнать отладчик тогда?" Полностью озадачен чем? Язык? Python слишком прост для полного недоумения. Какая-то библиотека? Может быть.

Вот что вы делаете - с отладчиком или без него.

  1. У вас есть источник, прочитайте его.
  2. Вы пишете небольшие тесты для тренировки библиотеки. Использование интерактивной оболочки, если это возможно. [Кажется, что все действительно хорошие библиотеки демонстрируют свои возможности в интерактивном режиме Python - я стремлюсь к этому уровню строгой, ясной простоты.]
  3. У вас есть источник, добавьте функции печати. ​​
7 голосов
/ 08 октября 2008

Я использую pdb для базовой отладки на python. Вот некоторые из ситуаций, которыми я пользуюсь:

  • Если у вас есть цикл, повторяющий более 100 000 записей, и вы хотите разорвать его в определенной точке, это становится действительно полезным. (Условные разрывы)
  • Отслеживание потока управления чужого кода.
  • Всегда лучше использовать отладчик, чем засорять код отпечатками.
  • Как правило, может быть несколько точек сбоев, приводящих к ошибке, но все они не очевидны на первый взгляд. Поэтому вы ищете очевидные места, если там нет ничего плохого, вы идете вперед и добавляете еще несколько распечаток ... отладчик может сэкономить ваше время здесь, вам не нужно добавлять распечатку и запускать снова.
6 голосов
/ 08 октября 2008

Обычно, когда ошибка скрыта в какой-то функции, но я не знаю точно, что или где. Либо я вставляю десятки log.debug() вызовов, а затем вынужден их отозвать, либо просто вставляю:

import pdb
pdb.set_trace ()

и затем запустите программу. Отладчик запустится, когда достигнет этой точки, и даст мне полный REPL, чтобы выковырять.

2 голосов
/ 08 октября 2008

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

pydev в Eclipse - довольно хорошая IDE, если вы ищете ее.

1 голос
/ 08 октября 2008

Я считаю очень полезным попасть в отладчик в неудачном тестовом примере.

Я добавляю import pdb; pdb.set_trace() непосредственно перед точкой отказа теста. Тест выполняется, создавая потенциально довольно большой контекст (например, импортируя фикстуру базы данных или создавая HTTP-запрос). Когда тест достигает строки pdb.set_trace(), он попадает в интерактивный отладчик, и я могу проверить контекст, в котором происходит сбой, с помощью обычных команд pdb в поисках подсказок относительно причины.

0 голосов
/ 04 февраля 2013

Возможно, вы захотите взглянуть на этот другой пост SO:

Почему отладка лучше в IDE?

Это имеет прямое отношение к тому, о чем вы спрашиваете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...