Python编程语言有哪些鲜为人知但有用的功能?
在Python中,如何从方法中打印当前调用堆栈(用于调试目的).
我只想查看进程的状态,是否可以将控制台附加到进程中,因此我可以调用进程内的函数并查看一些全局变量.
这个过程在不受影响的情况下运行会更好(当然性能可以降低一点)
我正在尝试使用gdb附加程序,但它返回给我:
附加到进程29139无法附加到进程.如果您的uid与目标进程的uid匹配,请检查/ proc/sys/kernel/yama/ptrace_scope的设置,或以root用户身份再次尝试.有关更多详细信息,请参阅/etc/sysctl.d/10-ptrace.conf ptrace:不允许操作.
edb-debugger返回"无法附加到进程,请检查权限,然后重试."
strace返回"attach:ptrace(PTRACE_ATTACH,...):不允许操作"
我将"kernel.yama.ptrace_scope"1更改为0并将"/ proc/sys/kernel/yama/ptrace_scope"1更改为0并尝试使用以下方法设置"set environment LD_PRELOAD =./ ptrace.so":
#include <stdio.h>
int ptrace(int i, int j, int k, int l) {
printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它仍然返回相同的错误.我如何将它附加到调试器?
所以我正在调试我的python程序并遇到一个使程序挂起的错误,就好像在无限循环中一样.现在,我之前遇到了无限循环的问题,但是当它挂断时我可以杀死程序并且python吐出一个有用的异常,告诉我当我发送kill命令时程序终止的位置.然而,现在,当程序挂断并且我按下ctrl-c时,它不会中止但会继续运行.我有什么工具可以用来找到挂机吗?我不熟悉分析,但据我所知,分析器只能为您提供有关已成功完成的程序的信息.或者您可以使用分析器来调试此类挂起吗?
我正在尝试转储所有活动线程的列表,包括每个线程的当前堆栈.我可以使用threading.enumerate()获取所有线程的列表,但我无法找到从那里到达堆栈的方法.
背景:一个Zope/Plone应用程序不时出现问题,消耗100%的CPU并需要重新启动.我感觉这是一个没有正确终止的循环,但我无法在test-environemt中重现它以进行验证.我设法注册一个可以从外部触发的信号处理程序,所以我可以在情况再次发生时立即触发一些代码.如果我可以为所有活动线程转储堆栈跟踪,这将给我一个问题的线索.洞的东西在python 2.4上运行......
关于如何追踪这些情况的任何想法都值得赞赏:)
干杯,克里斯
我有一个python脚本,我怀疑有一个死锁.我试图调试,pdb但如果我一步一步地去,它不会得到死锁,并且通过返回的输出我可以看到它没有被挂在同一个迭代上.我想将我的脚本仅在它被锁定时附加到调试器,是否可能?如果有必要,我愿意使用其他调试器.
我试图在锁定后修改多线程Python应用程序中的死锁.有没有办法附加调试器来检查进程的状态?
编辑:我在Linux上尝试这个,但是如果有一个跨平台的解决方案那就太棒了.毕竟是Python的:)
例如,
def test():
print "test"
Run Code Online (Sandbox Code Playgroud)
我用过perf record -g -p $pid,但结果只是一切PyEval_EvalFrameEx.如何才能获得真实姓名"test"或者如果不能使用perf?