Python:如何检测调试解释器

时间:2009-03-14 19:10:15

标签: python debugging

如何在我的python脚本中检测它是否由调试解释器(即python_d.exe而不是python.exe)运行?我需要改变传递给扩展的一些dll的路径。

例如我喜欢在我的python脚本开头做类似的事情:

#get paths to graphics dlls
if debug_build:
    d3d9Path   = "bin\\debug\\direct3d9.dll"
    d3d10Path  = "bin\\debug\\direct3d10.dll"
    openGLPath = "bin\\debug\\openGL2.dll"
else:
    d3d9Path   = "bin\\direct3d9.dll"
    d3d10Path  = "bin\\direct3d10.dll"
    openGLPath = "bin\\openGL2.dll"

我考虑过向扩展添加“IsDebug()”方法,如果它是调试版本(即使用“#define DEBUG”构建),则返回true,否则返回false。但这对于某些事情来说似乎有点骇人听闻我确定我可以让python告诉我......

3 个答案:

答案 0 :(得分:14)

Distutils use sys.gettotalrefcount to detect a debug python build

# ...
if hasattr(sys, 'gettotalrefcount'):
   plat_specifier += '-pydebug'
  • 此方法不依赖于可执行文件名“*_d.exe”。它适用于任何名称。
  • 这种方法是跨平台的。它不依赖于“_d.pyd”后缀。

请参阅Debugging BuildsMisc/SpecialBuilds.txt

答案 1 :(得分:3)

更好,因为它在运行嵌入式Python解释器时也可以检查

的返回值
imp.get_suffixes()

对于调试版本,它包含一个以'_d.pyd'开头的元组:

# debug build:
[('_d.pyd', 'rb', 3), ('.py', 'U', 1), ('.pyw', 'U', 1), ('.pyc', 'rb', 2)]

# release build:
[('.pyd', 'rb', 3), ('.py', 'U', 1), ('.pyw', 'U', 1), ('.pyc', 'rb', 2)]

答案 2 :(得分:2)

一种简单的方法,如果您不介意依赖文件名:

if sys.executable.endswith("_d.exe"):
  print "running on debug interpreter"

您可以详细了解sys模块及其各种设施here