gdb断点调试python代码
最近在解程序cordump的问题,代码是C/C++与python混合部署的,gdb的bt命令只能看到C/C++的调用栈,看不到python的调用栈。踩了一些坑,这里记录下最终的结果。下面都是在Python-3.11.12版本上实现的。python调用栈打印网上搜到的一些教程,是让下载对应python版本的libpython.py文件,然后在gdb里source一下,就有py-bt命令了,但是我执行了之后,py-bt命令并不生效。我在这里卡了几个小时,最后发现py-bt命令要生效有个大前提,就是python命令需要是debug版本!!!源码编译python debug版本创建build_python.sh:#!/bin/bashset-ewget--no-check-certificate https://www.python.org/ftp/python/3.11.12/Python-3.11.12.tgztar-xzfPython-3.11.12.tgzcdPython-3.11.12 ./configure --with-pydebug\--enable-shared\--prefix=/usr/local\CFLAGS="-g -O0 -fno-omit-frame-pointer"\LDFLAGS="-Wl,-rpath=/usr/local/lib"# --prefix= 这里要注意下,由于我这里是临时容器,所以我直接替换掉系统的python了。建议你安装到其他的目录,方便回退到系统自带的python。make-jmakeinstallldconfig使用py-bt打印python的调用栈写个简单的测试脚本test.py:importtime a=10deffunc_c():globala a=a+1b=5print("now in func_c")whileTrue:print("func_c is running")time.sleep(3)b=b+1print("func_c done")deffunc_b():globala a=a+1b=4print("now in func_b")func_c()print("func_b done")deffunc_a():globala a=a+1print("now in func_a")func_b()if__name__=="__main__":func_a()运行上面的脚本python test.py,使用gdb -p /pid/of/python test.py,然后在gdb命令窗口执行py-bt就能看到调用栈了。其中/workspace/python_gdb/libpython.py文件是从Python-3.11.12/Tools/gdb/libpython.py目录拷过来的。(gdb)source/workspace/python_gdb/libpython.py(gdb)py-bt Traceback(most recent call first): File"/workspace/test.py", line12,infunc_c time.sleep(3)File"/workspace/test.py", line21,infunc_b func_c()File"/workspace/test.py", line28,infunc_a func_b()File"/workspace/test.py", line31,inmodulefunc_a()(gdb)py-list8b=59print("now in func_c")10whileTrue:11print("func_c is running")12time.sleep(3)13b=b +114print("func_c done")1516def func_b():17global a18a=a +1(gdb)py-print blocal'b'=8libpython.py中的命令命令作用py-bt打印python调用栈py-bt-full打印所有线程python调用栈py-up调转到上一层python调用栈py-down调转到下一层python调用栈py-list打印当前python frame附近的代码行py-print打印变量值py-locals打印当前python frame的所有局部变量运行中的python代码打断点调试py-bt能成功运行后,我就想能动态调试正在运行中的python代码。这个功能对多进程、多机场景就特别有用,尤其那种拉起个服务耗时很久的场景,能节约调试时间。原来是有个py-break命令的PR合入请求的,但是最终社区没有合入这个PR,py-break这个命令就没有很好维护的地方,提到py-break命令的blog多是10年前的了,和当前python版本不匹配。最终我参照libpython.py写了个gdb自定义命令py-break,后面又加了py-next命令,都保存在py_break.py文件中:#!/usr/bin/env python3# -*- coding: utf-8 -*-""" GDB commands for Python source-level debugging (pydebug CPython): py-break file:lineno — break on a Python source line py-next — step to next Python line (step over calls) IMPORTANT --------- These hooks use `maybe_call_line_trace`, which only runs when line tracing is on. Start the inferior with: PYTHON_GDB_LINEBREAK=1 gdb --args /usr/local/bin/python3.11d your.py (sitecustomize installs a no-op sys.settrace when that env var is set.) Usage: (gdb) py-break test.py:13 (gdb) run (gdb) py-next """from__future__importprint_functionimportosimportreimportsysimportgdb _GDB_PYTHON_DIR="/workspace/python_gdb"if_GDB_PYTHON_DIRnotinsys.path:sys.path.insert(0,_GDB_PYTHON_DIR)def_filename_match(expected,actual):ifnotactual:returnFalseifexpected==actual:returnTrueifos.path.basename(actual)==os

相关新闻

Unity历史版本下载终极指南:告别官方链接失效烦恼

Unity历史版本下载终极指南:告别官方链接失效烦恼

Unity历史版本下载终极指南:告别官方链接失效烦恼 【免费下载链接】download.unity.com Unity国际版下载,解决国内打不开网站和被重定向的问题 项目地址: https://gitcode.com/gh_mirrors/do/download.unity.com 还在为Unity官方下载链接失效而烦…

2026/8/1 14:29:17阅读更多 →
InfluxDB 1.x 部署指南:兼容性考量与Web界面配置实践

InfluxDB 1.x 部署指南:兼容性考量与Web界面配置实践

1. 项目概述:为什么选择这两个特定版本?最近在整理一个老项目的监控数据迁移,发现历史数据存储用的还是InfluxDB 1.x的版本。为了复现当时的部署环境,我不得不重新搭建一套InfluxDB 1.1.0和1.8.0的测试实例,并且需要开…

2026/8/1 14:29:17阅读更多 →
深入解析HashMap:从哈希函数到红黑树,揭秘Java核心数据结构

深入解析HashMap:从哈希函数到红黑树,揭秘Java核心数据结构

1. 从“键值对”到“数组链表/红黑树”:HashMap的设计哲学 如果你写过Java,或者用过任何现代编程语言,那么HashMap对你来说一定不陌生。它就像一个超级高效的“字典”或“电话本”,给你一个名字(Key)&#…

2026/8/1 14:29:16阅读更多 →
MAA明日方舟助手:智能自动化彻底解放你的游戏时间

MAA明日方舟助手:智能自动化彻底解放你的游戏时间

MAA明日方舟助手:智能自动化彻底解放你的游戏时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode…

2026/8/1 15:33:54阅读更多 →
网页存档工具入门指南:3个技巧让你成为互联网历史侦探

网页存档工具入门指南:3个技巧让你成为互联网历史侦探

网页存档工具入门指南:3个技巧让你成为互联网历史侦探 【免费下载链接】wayback-machine-webextension A web browser extension for Chrome, Firefox, Edge, and Safari 14. 项目地址: https://gitcode.com/gh_mirrors/wa/wayback-machine-webextension 你是…

2026/8/1 15:33:54阅读更多 →
告别网盘下载烦恼:LinkSwift直链助手让文件下载轻松翻倍

告别网盘下载烦恼:LinkSwift直链助手让文件下载轻松翻倍

告别网盘下载烦恼:LinkSwift直链助手让文件下载轻松翻倍 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…

2026/8/1 15:33:54阅读更多 →
OWASP dep-scan可及性分析:精准过滤依赖漏洞误报的实战指南

OWASP dep-scan可及性分析:精准过滤依赖漏洞误报的实战指南

1. 项目概述:为什么“可及性分析”是解决依赖误报的关键 在软件供应链安全领域,误报问题就像房间里的大象,人人皆知,却常常避而不谈。你辛辛苦苦用工具扫描出几百个高危漏洞,结果开发团队一排查,发现一大半…

2026/8/1 15:33:54阅读更多 →
深度架构解析:Tesseract OCR引擎的技术实现与生产实践

深度架构解析:Tesseract OCR引擎的技术实现与生产实践

深度架构解析:Tesseract OCR引擎的技术实现与生产实践 【免费下载链接】tesseract Tesseract Open Source OCR Engine (main repository) 项目地址: https://gitcode.com/GitHub_Trending/te/tesseract Tesseract作为开源OCR领域的基石项目,提供了…

2026/8/1 15:33:54阅读更多 →
企业级AI化转型完整流程与AI+iPaaS工具选型指南

企业级AI化转型完整流程与AI+iPaaS工具选型指南

企业 AI 化转型已经从前沿创新,转变为企业提质、降本、增效、风控的常规升级路径。调研显示,大量企业采购 AI 模型、AI 工具后落地受阻,许多 AI 试点项目止步于演示阶段。究其核心痛点:企业普遍存在系统割裂、数据孤岛&#xff0c…

2026/8/1 15:31:53阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →