当前位置:  开发笔记 > 编程语言 > 正文

如何通过调试器检测Python代码?

如何解决《如何通过调试器检测Python代码?》经验,为你挑选了5个好方法。

有没有一种简单的方法可以在Python代码中检测到这些代码是通过Python调试器执行的?

我有一个使用Java代码的小型Python应用程序(感谢JPype).当我调试Python部分时,我也想为嵌入式JVM提供调试选项.



1> babbageclunk..:

Python调试器(以及分析器和覆盖工具)使用该sys.settrace函数(在sys模块中)来注册在有趣事件发生时调用的回调.

如果您使用的是Python 2.6,则可以调用sys.gettrace()以获取当前的跟踪回调函数.如果不是,None那么您可以假设您应该将调试参数传递给JVM.

目前尚不清楚如何在2.6之前做到这一点.


虽然它看起来更简洁,但如果没有设置断点,它在pdb中不起作用.

2> Stéphane Bon..:

使用Python 2.4的解决方案(它应该适用于任何优于2.1的版本)和Pydev:

import inspect

def isdebugging():
  for frame in inspect.stack():
    if frame[1].endswith("pydevd.py"):
      return True
  return False

只需替换pydevd.py为pdb,就可以使用pdb pdb.py.正如do3cc建议的那样,它试图在调用者的堆栈中找到调试器.

有用的链接:

Python调试器

解释器堆栈



3> Travelling M..:

另一种方法取决于你的python解释器是如何启动的.它要求你使用-O启动Python进行生产,没有-O进行调试.所以它确实需要一个可能难以维护的外部规则......但是它再次完全适合您的流程.

从python文档(请参阅此处或此处的 "内置常量" ):

__debug__
This constant is true if Python was not started with an -O option.

用法如下:

if __debug__:
    print 'Python started without optimization'



4> jordeu..:

如果您使用的Pydev也适用于多线程,则可以使用其他替代方法:

try:
    import pydevd
    DEBUGGING = True
except ImportError:
    DEBUGGING = False



5> 小智..:

如果您使用的是Pydev,则可以通过以下方式检测它:

import sys
if 'pydevd' in sys.modules: 
    print "Debugger"
else:
    print "commandline"

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有