You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在函数调用过程中自动收集所有堆栈跟踪(非仅异常时)

逐行堆栈跟踪自动收集实现方案

一、标准称谓

这类逐行记录的完整执行路径堆栈集合,通常被称为全路径执行跟踪(Full Path Execution Trace),也可叫逐行调用堆栈日志,是区别于采样式跟踪的完整代码执行轨迹记录。

二、现成工具包与实现方案

1. Python标准库sys.settrace自定义跟踪

利用Python内置的sys.settrace钩子,结合traceback模块捕获每行执行时的堆栈,是最灵活的底层方案:

import sys
import traceback
import pandas as pd
import numpy as np

# 存储所有堆栈记录
stack_log = []

def trace_callback(frame, event, arg):
    # 仅在执行到新行时捕获堆栈
    if event == 'line':
        # 提取并格式化堆栈信息,排除跟踪函数自身
        stack_frames = traceback.extract_stack(frame)
        formatted_stack = [
            f"File `{line.filename}`, line {line.lineno}, function `{line.name}`"
            for line in stack_frames[:-1]
        ]
        stack_log.append(formatted_stack)
    return trace_callback

# 开启跟踪
sys.settrace(trace_callback)

# 执行目标代码
pd.Series(np.NaN) | pd.Series("True")

# 关闭跟踪
sys.settrace(None)

# 保存日志到文件
with open("full_stack_trace.log", "w", encoding="utf-8") as f:
    for idx, stack in enumerate(stack_log):
        f.write(f"=== 第{idx+1}行执行堆栈 ===\n")
        f.write("\n".join(stack) + "\n\n")

2. pyinstrument(带火焰图生成)

这是一款性能分析工具,通过--full参数可强制生成接近逐行的完整执行跟踪,还能直接导出交互式火焰图:

# 安装工具
pip install pyinstrument

# 执行目标代码并生成全跟踪报告
pyinstrument --full your_script.py

执行后会生成HTML格式的报告,自带可交互的火焰图,无需额外格式转换。

3. 基于pdb的自动化实现

若需基于pdb完成,可通过脚本自动控制pdb的step和where命令,实现手动操作的自动化:

import pdb
import pandas as pd
import numpy as np

# 重定向pdb输出到日志文件
with open("pdb_stack.log", "w", encoding="utf-8") as log_file:
    p = pdb.Pdb(stdout=log_file)
    p.set_trace()
    try:
        # 启动目标代码执行
        pd.Series(np.NaN) | pd.Series("True")
        # 自动循环执行step和where命令
        while True:
            p.do_where()
            if not p.do_step():
                break
    except Exception:
        pass

注意:这种方式依赖pdb内部命令逻辑,稳定性不如sys.settrace,适合简单场景验证。

三、核心应用场景

  • 快速排查问题:通过完整堆栈列表,可直接定位到库内部执行的每一行代码,精准缩小异常或非预期行为的排查范围。
  • 生成执行火焰图:将收集到的堆栈序列转换为火焰图工具支持的格式,即可生成直观的执行时间占比可视化图。

内容的提问来源于stack exchange,提问作者Cornelius Roemer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:45:46