检查programm是否在调试模式下运行

时间:2016-07-28 11:25:46

标签: python python-2.7 debugging pycharm

我使用PyCharm IDE进行Python编程。

当我运行proframm时,是否有可能检查我是否处于调试模式?

我使用pyplot作为plt,如果我调试我的程序,只想显示一个图。是的,我可以有一个由我自己设置的全局布尔 debug ,但我寻找一个更性感的解决方案。

感谢您的支持!

3 个答案:

答案 0 :(得分:11)

根据文档,可以使用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

答案 1 :(得分:1)

以下在 VSCode 中对我有用:

import sys 

def debugger_is_active() -> bool:
    """Return if the debugger is currently active"""
    gettrace = getattr(sys, 'gettrace', lambda : None) 
    return gettrace() is not None

答案 2 :(得分:-1)

经过测试:

  • PyCharm 2020.2(以及之前的许多版本)
  • Python 3.7.5(以及之前的许多版本)
  • Windows 10 x64

在PyCharm中有两种调试方式:

  • 方法1:Selection-Based Debug Mode:菜单[ View > Tool Windows > Python Console ],然后选择一行,右键单击Execute Selection in Python Console
  • 方法2:Standard Debug Mode:使用工具栏下拉菜单中的Edit Configuration创建新配置,可以使用断点,变量监视等进行调试。

下面的函数检测方法#1(上面),因为它总是在命令行中通过--port=XXXX

C:\python\python.exe "C:\Program Files\JetBrains\PyCharm Professional Edition with Anaconda plugin 2020.1.1\plugins\python\helpers\pydev\pydevconsole.py" --mode=client --port=53093

功能:

import sys

def is_debug_pycharm_by_select():
    """
    Detect if running in Selection-Based Debug Mode under PyCharm:
      -  PyCharm menu [ View > Tool Windows > Python Console ], highlight Python line in editor, right click "Execute Selection in Python Console".
    :return: True if executing selection in Python Console.
    """
    for arg in sys.argv:
        if "--port=" in arg:  # This debug mode passes in "--port=XXXX".
            return True
    return False

if is_debug_pycharm_by_select():
    print("Selection-Based Debug Mode.")
else:
    print("Some other debug mode.")