当前位置: 首页 > news >正文

跟AI学一手之自定义调试函数或者类

最后一招是 macos 专用的,有帮助,所以记录一下

from gevent import monkey monkey.patch_all() import signal import sys import os # 检查是否有信号处理 def debug_signal(signum, frame): print(f"收到信号 {signum},堆栈:", file=sys.stderr) import traceback traceback.print_stack(frame) sys.exit(1) # 改为退出前打印 # 替换所有终止信号的处理 for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGQUIT]: signal.signal(sig, debug_signal) from __init_main__ import * #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- # 依赖接口 #----------------------------------------------------------------------------------------------------------------------- from libp import * from ui import * from w9099_01_data import * from w9099_01_i1 import * from w9099_01_gb28181.w9099_01_gb28181_main import gb28181_main from w9099_01_rtsp.w9099_01_rtsp_server_main import w9099_01_rtsp_main from threading import Thread import traceback from w9099_01_api.app import bootstrap_w9099_01_api_server #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- # 主进程入口 #----------------------------------------------------------------------------------------------------------------------- import atexit def on_exit(): # 打印退出时的堆栈 print("\n" + "="*50, file=sys.stderr) print("进程即将退出,堆栈:", file=sys.stderr) traceback.print_stack(file=sys.stderr) print("="*50, file=sys.stderr) sys.stderr.flush() # 注册退出钩子 atexit.register(on_exit) # 同时捕获 SystemExit original_exit = sys.exit def custom_exit(code=0): print(f"\n!!! sys.exit({code}) 被调用 !!!", file=sys.stderr) traceback.print_stack(file=sys.stderr) sys.stderr.flush() original_exit(code) sys.exit = custom_exit import threading import time def check_threads(): """检查是否所有非守护线程都已结束""" print("活跃线程:", threading.enumerate()) for t in threading.enumerate(): print(f" {t.name}: daemon={t.daemon}, alive={t.is_alive()}") # 在程序退出前调用 import atexit atexit.register(check_threads) import threading import sys import traceback # Python 3.8+ 官方推荐方式,无需替换 Thread 类 def handle_thread_exception(args): print(f"线程 {args.thread.name} 异常: {args.exc_type.__name__}: {args.exc_value}", file=sys.stderr) traceback.print_exception(args.exc_type, args.exc_value, args.exc_traceback) threading.excepthook = handle_thread_exception # 捕获线程中的未处理异常(Python 3.8+) if hasattr(threading, 'excepthook'): def handle_thread_exception(args): print(f"线程 {args.thread.name} 异常:", file=sys.stderr) traceback.print_exception(args.exc_type, args.exc_value, args.exc_traceback) threading.excepthook = handle_thread_exception import faulthandler import sys # 启用崩溃转储 faulthandler.enable(file=sys.stderr, all_threads=True) # 可选:设置超时,如果卡住就dump堆栈 # faulthandler.dump_traceback_later(30, repeat=True) # 30秒后打印堆栈 import faulthandler import sys import os # 必须写入文件,macOS 终端可能丢失输出 crash_log = open('/tmp/python_crash.log', 'w') faulthandler.enable(file=crash_log, all_threads=True) # 同时设置超时 dump faulthandler.dump_traceback_later(5, repeat=True, file=crash_log) print("程序启动", file=crash_log) crash_log.flush()
http://www.jsqmd.com/news/342414/

相关文章:

  • 2026年 化妆刷厂家推荐排行榜:动物毛化妆刷,套刷定制,轮廓刷腮红刷粉底刷眼影刷,专业美妆工具实力解析 - 品牌企业推荐师(官方)
  • 郑州瑞创建材有限公司——立足荥阳,打造河南夯土板行业标杆品牌 - 朴素的承诺
  • PHP毕设项目:基于php+vue的高校资助管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 2026中国境外券商投行机构哪家靠谱?送你一份综合评估与选择指南 - Top品牌推荐
  • DeepSeek总结的DuckDB扩展开发实战指南:从标量函数到并行表函数
  • 2026十大高清免费版权图片素材下载网站推荐 - 品牌2026
  • 2026年吸塑机厂家实力推荐榜:全自动正负压/蛋糕盒/汽车配件专用等吸塑机品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • 2026年 云安全服务商推荐榜单:云安全防护/云安全解决方案/云安全技术/企业云安全/公有云安全/私有云安全,全方位守护企业数字资产 - 品牌企业推荐师(官方)
  • 耐高温水泵采购怎么选?哪些生产企业通过了行业认证? - 品牌推荐大师
  • 耐高温水泵哪家厂家质量可靠?源头生产商有哪些推荐? - 品牌推荐大师
  • 2026年钢材批发厂家厂家最新推荐:方管销售厂、钢材市场、钢材生产厂家、镀锌方管厂家、镀锌方管生产厂家、附近方管批发选择指南 - 优质品牌商家
  • 2026设计师、美工、运营必备:十大正版商用图库网站深度评测与推荐 - 品牌2026
  • 2026年钢材厂家厂家推荐:方管批发厂推荐/钢材生产厂家/哪里有方管批发/成都方管批发/成都钢材批发/成都钢材批发市场/选择指南 - 优质品牌商家
  • 为什么海外大厂开始重新评估 Airbyte?
  • 第 1 篇 | 调度系统,不只是一个“定时器”
  • 【山海鲸实战案例】通过二维组件控制三维场景天气变化
  • 如何选择一款真正能打通研发到生产的工业AI平台?
  • 2026年数据风控厂家推荐:风控平台/风控技术/风控模型/风控系统/风控解决方案/企业数据/实时风控/数据分析/选择指南 - 优质品牌商家
  • PHP计算机毕设之基于php+vue的动物救助网站的设计与实现基于Vue的宠物领养系统的设计(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机网络经典问题透视:无线个人区域网WPAN的主要特点是什么?
  • Nodejs毕设项目:基于VUE框架的实时新闻推送平台(源码+文档,讲解、调试运行,定制等)
  • STM32L452VE使用Cortex-Debug
  • 计算机网络经典问题透视:如何探知无线AP的SSID与BSSID?
  • 2026年汽车真皮座椅翻新厂家实力推荐:磨损/掉色/换皮/老化修复及汽车装饰用品源头服务商精选 - 品牌推荐官
  • 基于深度学习YOLOv11的车辆行人检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 【毕业设计】基于php+vue的高校资助管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • win64_11gR2_client.zip 怎么安装?Oracle 11g 客户端详细安装步骤 - 教程
  • 【ACM模式】栈的操作
  • Nodejs毕设选题推荐:基于VUE框架的实时新闻推送新闻信息管理、新闻投稿管理平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【毕业设计】基于VUE框架的实时新闻推送平台(源码+文档+远程调试,全bao定制等)