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:08 阅读更多 →
InfluxDB 1.x 部署指南:兼容性考量与Web界面配置实践

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

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

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

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

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

2026/8/1 14:29:08 阅读更多 →

最新新闻

AutoKey终极指南:Linux桌面自动化开源神器

AutoKey终极指南:Linux桌面自动化开源神器

AutoKey终极指南:Linux桌面自动化开源神器 【免费下载链接】autokey AutoKey, a desktop automation utility for Linux and X11. 项目地址: https://gitcode.com/gh_mirrors/au/autokey AutoKey是一款专为Linux和X11系统设计的桌面自动化工具,提…

2026/8/1 15:12:28 阅读更多 →
终极解决方案:一站式获取Unity历史版本与Unity Hub全平台下载

终极解决方案:一站式获取Unity历史版本与Unity Hub全平台下载

终极解决方案:一站式获取Unity历史版本与Unity Hub全平台下载 【免费下载链接】download.unity.com Unity国际版下载,解决国内打不开网站和被重定向的问题 项目地址: https://gitcode.com/gh_mirrors/do/download.unity.com 还在为Unity官方下载链…

2026/8/1 15:12:28 阅读更多 →
Codex同时处理多个仓库会混乱吗?ChatGPT多仓库项目实战

Codex同时处理多个仓库会混乱吗?ChatGPT多仓库项目实战

Codex同时处理多个仓库会混乱吗?会,但问题通常不在仓库数量,而在任务边界没有写清。当前端、后端和SDK分散在不同仓库时,如果只告诉Codex“把登录功能改好”,它可能读对代码、改错位置,或者只完成其中一半。…

2026/8/1 15:12:28 阅读更多 →
原油突破交易策略:从成交量到止损止盈的实战指南

原油突破交易策略:从成交量到止损止盈的实战指南

那天下午,盯着屏幕上的原油期货K线图,我突然意识到一个问题:为什么同样的突破策略,有人能稳定盈利,有人却反复被假突破“打脸”?这不仅仅是参数设置的区别,更关键的是对“突破”这件事的底层理解…

2026/8/1 15:12:28 阅读更多 →
Python自动化测试框架全解析:从Pytest到Playwright的实战选型指南

Python自动化测试框架全解析:从Pytest到Playwright的实战选型指南

1. 项目概述:为什么Python是自动化测试的首选? 如果你正在软件开发、测试或者运维的岗位上,大概率已经听过无数次“自动化测试”这个词了。手动点击按钮、重复填写表单、一遍遍验证接口返回,这些枯燥且容易出错的工作,…

2026/8/1 15:12:28 阅读更多 →
专业技能展示与个人品牌构建的实用框架

专业技能展示与个人品牌构建的实用框架

1. 个人品牌构建的核心价值 在当今高度互联的职业环境中,个人品牌已经不再是可有可无的装饰品,而是职业发展的核心资产。一个精心设计的个人简介就像专业领域的"数字名片",能够在短短几秒钟内向潜在合作伙伴传递关键价值主张。我从…

2026/8/1 15:11:28 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

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

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

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