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
awe*_*oon 12
根据文档,可以使用settrace/ gettracefunctions来实现Python调试器:
Run Code Online (Sandbox Code Playgroud)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
测试于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
| 归档时间: | 
 | 
| 查看次数: | 3398 次 | 
| 最近记录: |