【发布时间】:2017-06-13 13:16:35
【问题描述】:
在 C 程序(和使用 GCC)中,我经常会创建一个包含当前函数名称的调试打印宏。也就是说,类似于:
#define DPRINTF(fmt, ...) printf("[%s] " fmt, __FUNCTION__, ##__VA_ARGS__)
使用时,当前函数将被添加到每次打印之前,在运行时提供更多有用的调试信息。比如下面的代码
#include <stdio.h>
#define DPRINT(fmt, ...) printf("[%s] " fmt, __FUNCTION__, ##__VA_ARGS__)
void testfunction1(){
DPRINT("Running %d\n",1);
}
void testfunction2(){
DPRINT("Running %d\n",2);
}
int main(void) {
DPRINT("Running: %d\n",0);
testfunction1();
testfunction2();
return 0;
}
会输出:
[main] Running: 0
[testfunction1] Running 1
[testfunction2] Running 2
这样的事情可以在 Python 中完成吗?
我搜索了一下,发现this StackOverflow 问题解释了如何使用inspect 从堆栈中读取名称。但是,我发现Python不支持宏,所以不能使用和我的C程序一样的形式。
是否有某种机制可以支持这种类型的调试打印?我尝试了 lambdas,但在这种情况下,“函数名”打印为“”。
【问题讨论】:
-
它仍然不清楚你的期望
-
@AmeyYadav,更新了问题。
-
你能把你尝试过的示例代码放上来吗?从那里开始通常很容易。为了快速回答,是的,你可以,检查 python 中装饰器的使用。你可以包装一个函数来调试它的名字。
标签: python function debugging inspect