我们需要查看我们的代码是否在以编程方式启用调试的CPython可执行文件下运行。 sys
模块似乎没有任何信息,至少在Ubuntu 14.04的python3.4-dbg
上。 sys.flags.debug
设置为0.原因是我们的代码未修改实际上崩溃了python的调试版本。 更新:特别是代码在C端崩溃并出现断言错误。
肯定比'd' in sys.executable
更好。
答案 0 :(得分:9)
以下代码可能就是你所追求的
使用python3.4
:
>>> import sysconfig
>>> sysconfig.get_config_var('Py_DEBUG')
0
另一方面使用python3.4-dbg
:
>>> import sysconfig
>>> sysconfig.get_config_var('Py_DEBUG')
1
但是,还有控制“调试”行为的编译时选项,例如此处提到的NDEBUG
:http://bugs.python.org/issue17411。
换句话说:虽然Py_DEBUG
可能未设置(0),但由NDEBUG
控制的C代码断言仍可能改变python的行为。设置Py_DEBUG
始终取消设置NDEBUG
,从而导致应用断言。缺少Py_DEBUG
对NDEBUG
没有影响 - 可能会也可能不会定义。如果定义了NDEBUG
,则断言将被定义为void宏。
来自http://en.wikipedia.org/wiki/Assert.h:
程序员可以通过重新编译来消除断言 程序,无需更改源代码:如果宏NDEBUG是 在包含之前定义,assert()宏是 简单地定义为:
#define assert(ignore)((void) 0)
一种可能但不可移植的解决方案是检查编译器命令行OPT
:
>>> '-DNDEBUG' not in (sysconfig.get_config_var('OPT') or '')
其中OPT
可以是例如
>>> sysconfig.get_config_var('OPT')
'-DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes'