python怎么实现trace功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎么实现trace功能相关的知识,希望对你有一定的参考价值。

python怎么实现类似nodejs的trace功能,
能够获取到当前的调用调用堆栈.
我新建了3个文件,
#a1.py
import a2
def Fun1():
a2.Fun2()
Fun1()

#a2.py
import a3
def Fun2():
a3.Fun3()

#a3.py
import traceback
def Fun3():
try:
assert(False)
except Exception,e:
print(11,traceback.format_exc())

执行出现如下结果
E:\MyCode\Python>a1.py
(11, 'Traceback (most recent call last):\n File "E:\\MyCode\\Python\\a3.py", li
ne 4, in Fun3\n assert(False)\nAssertionError\n')
还是无法实现类似nodejs的那种trace功能,是哪里写错了吗?

参考技术A 使用语句traceback.extract_stack()

给一个使用这个语句的实例:
//用try..except捕获异常,然后traceback.print_exc()打印
#!/usr/bin/python
import sys
import traceback
import test1

a=10
b=0

try:
print test1.division(a,b)
except:
print 'invoking division failed.'
traceback.print_exc()
sys.exit(1)

执行test2.py失败抛出异常。

$python test2.py
execution python-2.5.1/python (enodeb/linux)
b eq 0
invoking division failed.
Traceback (most recent call last):
File "test2.py", line 10, in <module>
test1.division(a,b)
File "/home/fesu/test1.py", line 6, in division
sys.exit(1)
SystemExit: 1
参考技术B 用traceback:
except Exception,e:
self.logger.error("encounter error in poll %s:"%(traceback.format_exc()))追问

按照您的意思,我新建了3个文件,分别是a1.py,a2.py,a3.py,
源码在问题补充里,还是无法实现nodejs的trace功能?

本回答被提问者采纳
参考技术C 用traceback:            except Exception20e:                self.logger.error(&quot;encounter error in poll  %s:&quot;%(traceback.format_exc())) 参考技术D 使用如下例:

1 from goto import *
2 from
3 @patch
4 def f2():
5 goto(10)
6 print 'should not see this'
7 label(10)
8 for i in range(1,99999):
9 print i
10 if i == 5:
11 goto('out')
12 label('out')
13
14 f2()

用法是:
1. from goto import *。注意暂时不支持import goto,不是不能实现,是暂时没时间写。
2.对需要使用goto的函数,前面加个@patch
3.用label(x)和goto(x)的形式写label和goto。x可以是数字或字符串。

goto模块的代码如下:
goto.py

Visual Studio 在调试模式下禁用 TRACE

【中文标题】Visual Studio 在调试模式下禁用 TRACE【英文标题】:Visual Studio disable TRACE in debug mode 【发布时间】:2009-08-06 22:40:11 【问题描述】:

对于我在 Visual Studio 2005 中开发的 C++ 项目,我想在调试模式下运行代码时禁用 TRACE 输出选项。我已经在互联网上搜索了如何实现这一点,但没有运气。这甚至很容易实现吗?如果是这样,怎么做?提前致谢。

更新#1:

#define     USETRACE        0
#if !USETRACE && DEBUG
    #undef TRACE
    #define TRACE(x)
#endif

我在调试模式下尝试了上面的代码,靠近 stdafx.h 的最顶部,但 TRACE 仍在输出到调试输出。如果能提供关于我的实现有什么问题的建议以便我修复它,那就太好了。谢谢。

【问题讨论】:

根据此信息更新了我的答案。 更新后的建议也不太奏效。 这是 MFC 应用、ATL 应用还是其他框架? @Stephen Nutt:这是一个 MFC 应用程序。 查看 _CrtSetReportHook 和 _CrtSetReportHook2 msdn.microsoft.com/en-us/library/0yysf5e6%28VS.80%29.aspx 【参考方案1】:

原来有一种更简单的方法可以做到这一点,将全局变量 afxTraceEnabled 设置为 false

afxTraceEnabled = false;

参考

http://msdn.microsoft.com/en-us/library/aa235240(VS.60).aspx

【讨论】:

在这种情况下,我在宏中添加了 undef 行。但是,TRACE 语句仍不正常工作(打印到调试输出窗口)。我将这些行放在预编译的头文件(stdafx.h)中。将指令放在预编译的头文件中是否有任何明显不合适的地方?谢谢。 @stanigator,没有。我经常将诸如此类的宏放在 stdafx.h 的顶部,以确保它在全球范围内应用。 @JaredPar:我已经更新了我最初尝试做的事情。干杯。【参考方案2】:

前几次用了困难的方法,这就是我最终要做的:

#if USETRACE
    #define PRINT TRACE
#else
    #define PRINT
#endif

【讨论】:

以上是关于python怎么实现trace功能的主要内容,如果未能解决你的问题,请参考以下文章

PythonHttp Post请求四种请求体的Python实现

ImportError:来自“tensorflow.python.profiler”的“trace”

怎么用Python + Flask框架实现Web应用实现日志记录功能?

python怎么实现自动点击按钮的功能

在python中怎么实现goto功能

怎么看写的python代码的功能模块的核心功能