Проверьте, работает ли программа в режиме отладки

Я использую PyCharm IDE для программирования Python.

есть ли возможность проверить, нахожусь ли я в режиме отладки или нет, когда я запускаю свой proframm?

Я использую pyplot как plt и хочу, чтобы рисунок был показан только при отладке моей программы. Да, у меня может быть глобальное логическое debug который установлен мной, но я ищу более сексуальное решение.

Спасибо за Вашу поддержку!

1 ответов


согласно документации, settrace / gettrace функции могут использоваться для реализации отладчика Python:

sys.settrace(tracefunc) 

установите функцию трассировки системы, которая позволяет вы должны реализовать отладчик исходного кода Python в Python. Функция зависит от потока; для отладчика для поддержки нескольких потоков он должен быть зарегистрирован с помощью settrace() для каждого отлаживаемого потока.

однако эти методы могут быть недоступны в все реализации:

CPython деталь реализации: элемент settrace() функция предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия и как. Его поведение является частью платформы реализации, а не часть определения языка, и, таким образом, не может быть доступна во всех Реализации Python.

вы можете использовать следующий фрагмент, чтобы проверить, отлаживает ли кто-то ваш код:

import sys


gettrace = getattr(sys, 'gettrace', None)

if gettrace is None:
    print('No sys.gettrace')
elif gettrace():
    print('Hmm, Big Debugger is watching me')
else:
    print("Let's do something interesting")
    print(1 / 0)

это работает для pdb:

$ python -m pdb main.py 
> /home/soon/Src/Python/main/main.py(3)<module>()
-> import sys
(Pdb) step
> /home/soon/Src/Python/main/main.py(6)<module>()
-> gettrace = getattr(sys, 'gettrace', None)
(Pdb) step
> /home/soon/Src/Python/main/main.py(8)<module>()
-> if gettrace is None:
(Pdb) step
> /home/soon/Src/Python/main/main.py(10)<module>()
-> elif gettrace():
(Pdb) step
> /home/soon/Src/Python/main/main.py(11)<module>()
-> print('Hmm, Big Debugger is watching me')
(Pdb) step
Hmm, Big Debugger is watching me
--Return--
> /home/soon/Src/Python/main/main.py(11)<module>()->None
-> print('Hmm, Big Debugger is watching me')

И PyCharm:

/usr/bin/python3 /opt/pycharm-professional/helpers/pydev/pydevd.py --multiproc --qt-support --client 127.0.0.1 --port 34192 --file /home/soon/Src/Python/main/main.py
pydev debugger: process 17250 is connecting

Connected to pydev debugger (build 143.1559)
Hmm, Big Debugger is watching me

Process finished with exit code 0