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

the*_*cco 11 python debugging pycharm python-2.7

我使用PyCharm IDE进行Python编程.

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

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

感谢您的支持!

use*_*323 24

以下内容在 VSCode 中适用于我:

import sys 

def debugger_is_active() -> bool:
    """Return if the debugger is currently active"""
    return hasattr(sys, 'gettrace') and sys.gettrace() is not None
Run Code Online (Sandbox Code Playgroud)


awe*_*oon 12

根据文档,可以使用settrace/ gettracefunctions来实现Python调试器:

sys.settrace(tracefunc) 
Run Code Online (Sandbox Code Playgroud)

设置系统的跟踪功能,允许您在Py​​thon中实现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)
Run Code Online (Sandbox Code Playgroud)

这适用于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')
Run Code Online (Sandbox Code Playgroud)

和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
Run Code Online (Sandbox Code Playgroud)


Red*_*yed 6

测试于PyCharm 2021.3.2

def is_debug():
    import sys

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

    if gettrace is None:
        return False
    else:
        v = gettrace()
        if v is None:
            return False
        else:
            return True
Run Code Online (Sandbox Code Playgroud)