运行时检测调用堆栈 python_显示正在运行的Python应用程序的堆栈跟踪

当Python应用程序运行时遇到问题,可以使用多种方法获取堆栈跟踪。例如,通过导入`sys`, `traceback`和`signal`模块,设置信号处理函数来打印堆栈跟踪。还可以使用`pdb`模块进行交互式调试,或者直接调用`traceback.print_stack()`。此外,发送SIGUSR1信号也能动态获取堆栈信息。" 122686657,9328208,ThinkPHP6.0本地部署与安装教程,"['PHP', '框架', 'ThinkPHP', '部署', 'Composer']
摘要由CSDN通过智能技术生成

我有这个Python应用程序不时被卡住,我无法找到在哪里。

有没有办法告诉Python解释器向您显示正在运行的确切代码?

某种即时堆栈跟踪?

相关问题:

#1楼

我将一些附加到正在运行的Python进程中的工具一起攻击并注入一些代码来获取Python shell。

#2楼

我正在寻找一段时间来调试我的线程,我在这里找到了感谢haridsv。 我使用traceback.print_stack()使用稍微简化的版本:

import sys, traceback, signal

import threading

import os

def dumpstacks(signal, frame):

id2name = dict((th.ident, th.name) for th in threading.enumerate())

for threadId, stack in sys._current_frames().items():

print(id2name[threadId])

traceback.print_stack(f=stack)

signal.signal(signal.SIGQUIT, dumpstacks)

os.killpg(os.getpgid(0), signal.SIGQUIT)

为了我的需要,我也按名称过滤线程。

#3楼

python -dv yourscript.py

这将使解释器以调试模式运行,并为您提供解释器正在执行的操作的跟踪。

如果您想以交互方式调试代码,您应该像这样运行它:

python -m pdb yourscript.py

这告诉python解释器使用模块“pdb”运行你的脚本,这是python调试器,如果你运行它就像解释器将以交互模式执行,就像GDB一样

#4楼

traceback模块有一些很好的功能,其中包括:print_stack:

import traceback

traceback.print_stack()

#5楼

>>> import traceback

>>> def x():

>>> print traceback.extract_stack()

>>> x()

[('', 1, '', None), ('', 2, 'x', None)]

您还可以很好地格式化堆栈跟踪,请参阅文档 。

编辑 :为了模拟Java的行为,正如@Douglas Leeder所建议的那样,添加:

import signal

import traceback

signal.signal(signal.SIGUSR1, lambda sig, stack: traceback.print_stack(stack))

到应用程序中的启动代码。 然后,您可以通过将SIGUSR1发送到正在运行的Python进程来打印堆栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值