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

在docker容器中使用gdb调试python3.11的进程

gdb调试python进程的前提条件

  1. 安装python及python调试信息
  2. 安装gdb工具
  3. 安装python-gdb.py扩展

安装过程

我们使用docker来安装以上内容,Dockerfile文件内容如下:

FROM docker.io/centos:7.4.1708# 安装依赖
RUN yum install -y -q epel-release && \yum install -y -q gcc zlib zlib-devel libffi libffi-devel make openssl-devel openssl11 openssl11-devel# 下载python源码包并解压
RUN curl -fSL https://mirrors.huaweicloud.com/python/3.11.2/Python-3.11.2.tgz -o python.tgz && \tar -zxf python.tgz# 编译安装python(包含python调试信息)
RUN cd Python-3.11.2 && \export CPPFLAGS=-I/usr/include/openssl11 && export LDFLAGS=-L/usr/lib64/openssl11 && \./configure --prefix=/usr/python && \make -j "$(nproc)" python && \make install# 创建软链接,将python命令指向Python 3.11.2
RUN ln -sf /usr/python/bin/python3 /usr/bin/python  && \ln -sf /usr/python/bin/pip3 /usr/bin/pip && \sed -i '1s/^.*$/#!\/usr\/bin\/python2.7/' /usr/bin/yum  && \sed -i '1s/^.*$/#!\/usr\/bin\/python2.7/' /usr/libexec/urlgrabber-ext-down# 安装gdb工具
RUN yum install -y -q centos-release-scl && \yum install -y -q devtoolset-9-gdb && \ln -s /opt/rh/devtoolset-9/root/usr/bin/gdb /usr/bin/gdb# 进入gdb时自动执行python-gdb.py
RUN sed -i 's/, encoding="utf-8"//' /Python-3.11.2/python-gdb.py && \echo "source /Python-3.11.2/python-gdb.py" >> /root/.gdbinit

构建命令:

docker build -t python-gdb:1.0 .

测试

准备测试环境

# 运行容器
docker run --name python-gdb-test --cap-add sys_ptrace -itd python-gdb:1.0 
# 进入容器
docker exec -it python-gdb-test bash
# 写一个测试脚本script.py
echo "from time import sleep
while True:print('aa')sleep(1)" > script.py
# 后台运行
nohup python script.py > a.log 2>&1 &
# 查看进程号
ps -ef | grep pytho[n] | awk '{print $2}'

使用gdb调试python进程

[root@4d607f8672d7 /]# gdb
(gdb) attach 29
(gdb) py-bt
Traceback (most recent call first):File "//script.py", line 4, in <module>sleep(1)
(gdb) py-list1    from time import sleep2    while True:3        print('aa')>4        sleep(1)

到这里就测试成功了。

下面列一下gdb调试python进程的一些常用命令:

bt                       # 当前C调用栈
py-bt                    # 当前Python调用栈
py-bt-full               # 输出Python调用栈
py-up                    # 上一帧(py级别的帧)
py-down                  # 下一帧(py级别的帧)
py-list                  # 当前py代码位置
py-locals                # 输出locals变量
py-print <var>           # 输出指定变量
info thread              # 线程信息
thread <id>              # 切换到某个线程
thread apply all py-list # 查看所有线程的python代码位置
quit                     # 中断

踩坑记录

  1. 源码编译python时,make命令带有"LDFLAGS=-Wl,–strip-all"参数会删除调试信息,要保留调试信息的话不要带这个参数
  2. 直接使用yum install gdb安装的gdb工具版本过低,使用时会报错,需要从SCL源来安装更新版本的GDB
  3. gdb使用python2.7来执行python-gdb.py会报错,把python-gdb.py脚本中open(filename, ‘r’, encoding=“utf-8”)中的encoding参数去掉,就可以正常执行了
  4. docker容器默认情况不允许使用系统ptrace,会导致gdb使用报错,运行容器时增加–cap-add sys_ptrace参数来关闭ptrace限制

参考

使用 GDB 调试 C API 扩展和 CPython 内部代码 — Python 3.11.8 文档
Docker不能使用gdb调试的解决方案

相关文章:

在docker容器中使用gdb调试python3.11的进程

gdb调试python进程的前提条件 安装python及python调试信息安装gdb工具安装python-gdb.py扩展 安装过程 我们使用docker来安装以上内容&#xff0c;Dockerfile文件内容如下&#xff1a; FROM docker.io/centos:7.4.1708# 安装依赖 RUN yum install -y -q epel-release &…...

堆排序要点和难点以及具体案例应用

堆排序(Heap Sort)是一种基于堆数据结构的排序算法。下面我将以分点表示和归纳的方式,结合相关数字和信息,详细描述堆排序的PTA(Programming and Testing Approach,编程与测试方法)。 1. 堆排序原理 堆排序是一种树形选择排序,利用了完全二叉树的性质,通过构建最大堆…...

pyspark中使用mysql jdbc报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决

报错信息&#xff1a; py4j.protocol.Py4JJavaError: An error occurred while calling o33.load. : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 我的解决方法&#xff1a; 这个报错就是提示你找不到jar包&#xff0c;所以你需要去下载一个和你mysql版本匹配的j…...

对称加密系统解析

目录​​​​​​​ 1.概述 2. 对称密码类型 3. 对称加密优缺点 4. 对称加密算法 4.1 DES 4.2 3DES 4.3 AES ​​​​​​4.4 SM1 4.5 SM4 1.概述 对称加密&#xff0c;是指在加密和解密时使用同一秘钥的方式。秘钥的传送和保存的保护非常重要&#xff0c;务必不要让秘…...

初识 java 2

1. idea 的调试 1. 点击鼠标左键设置断点 2.运行到断点处 点击 或点击鼠标右键&#xff0c;再点击 使代码运行到断点处&#xff0c;得到 2. 输出到控制台 System.out.println(value);//输出指定的内容&#xff0c;并换行 value 要打印的内容System.out.print(value);…...

云端狂飙:Django项目部署与性能优化的极速之旅

Hello&#xff0c;我是阿佑&#xff0c;这次阿佑将手把手带你亲自踏上Django项目从单机到云端的全过程&#xff0c;以及如何通过Docker实现项目的无缝迁移和扩展。不仅详细介绍了Docker的基本概念和操作&#xff0c;还深入探讨Docker Compose、Swarm和Kubernetes等高级工具的使…...

GDPU JavaWeb 大结局篇(持续更新中)

GDPUJavaWeb程序设计复习&#xff0c;习题集&#xff0c;重点知识总结&#xff0c;一篇就够了。 实验复习 JavaWeb代码复习&#xff0c;在专栏也可查阅。 课后巩固习题 1 【单选题】下列说法正确的是( D ) A、在B/S结构中,结果应用软件发生了改变,就必须通知所有的客户端重新…...

Linux系统信息的查看

目录 前言一、系统环境二、查看系统IP地址信息2.1 ifconfig命令2.2 ip address命令 三、查看系统端口信息3.1 nmap命令3.2 netstat命令 四、查看系统进程信息4.1 ps命令4.2 kill命令 五、查看系统监控信息5.1 top命令5.2 df命令iostat命令5.3 sar命令 总结 前言 本篇文章介绍查…...

LE Audio音频广播新功能Auracast介绍

LE Audio音频广播新功能Auracast介绍 /*! \copyright Copyright (c) 2019-2022 Qualcomm Technologies International, Ltd. All Rights Reserved. Qualcomm Technologies International, Ltd. Confidential and Proprietary. \file audio_sources.h \defgroup audio_so…...

一文学习yolov5 实例分割:从训练到部署

一文学习yolov5 实例分割&#xff1a;从训练到部署 1.模型介绍1.1 YOLOv5结构1.2 YOLOv5 推理时间 2.构建数据集2.1 使用labelme标注数据集2.2 生成coco格式label2.3 coco格式转yolo格式 3.训练3.1 整理数据集3.2 修改配置文件3.3 执行代码进行训练 4.使用OpenCV进行c部署参考文…...

【设计模式】行为型设计模式之 策略模式学习实践

介绍 策略模式&#xff08;Strategy&#xff09;&#xff0c;就是⼀个问题有多种解决⽅案&#xff0c;选择其中的⼀种使⽤&#xff0c;这种情况下我们 使⽤策略模式来实现灵活地选择&#xff0c;也能够⽅便地增加新的解决⽅案。⽐如做数学题&#xff0c;⼀个问题的 解法可能有…...

lua中大数相乘的问题

math.maxinteger * 2 --> -2 原因&#xff1a;math.maxinteger的二进制 &#xff1a; 0111111111111111111111111111111111111111111111111111111111111111 往左移位&#xff0c;最右加一个0&#xff0c;是 1111111111111111111111111111111111111111111111111111111111111…...

第一个SpringBoot项目

目录 &#x1f4ad;1、新建New Project IDEA2023版本创建Sping项目只能勾选17和21&#xff0c;却无法使用Java8&#xff1f;&#x1f31f; 2、下载JDK 17&#x1f31f; &#x1f4ad;2、项目创建成功界面 1、目录 &#x1f31f; 2、pom文件&#x1f31f; &#x1f4ad;3、…...

Android 10.0 Launcher修改density禁止布局改变功能实现

1.前言 在10.0的系统rom定制化开发中,在关于Launcher3的定制化功能中,在有些功能需要要求改变系统原有的density屏幕密度, 这样就会造成Launcher3的布局变化,所以就不符合要求,接下来就来看下如何禁止改变density造成Launcher3布局功能 改变的实现 2.Launcher修改densit…...

CAN协议简介

协议简介 can协议是一种用于控制网络的通信协议。它是一种基于广播的多主机总线网络协议&#xff0c;常用于工业自动化和控制领域。can协议具有高可靠性、实时性强和抗干扰能力强的特点&#xff0c;被广泛应用于汽车、机械、航空等领域。 can协议采用了先进的冲突检测和错误检测…...

(二)JSX基础

什么是JSX 概念&#xff1a;JSX是JavaScript和XML&#xff08;HTML&#xff09;的缩写&#xff0c;表示在JS代码中编写HTML模版结构&#xff0c;它是React中编写UI模板的方式。 优势&#xff1a;1.HTML的声明式模版方法&#xff1b;2.JS的可编程能力 JSX的本质 JSX并不是标准…...

GB 38469-2019 船舶涂料中有害物质限量检测

船舶涂料是指涂于船舶各部位&#xff0c;能防止海水、海洋大气腐蚀和海生物附着及满足船舶特种要求的各种涂料的统称。 GB 38469-2019船舶涂料中有害物质限量检测项目&#xff1a; 测试指标 测试方法 挥发性有机化合物VOC GB 30981 甲苯 GB 24408 苯 GB 30981 甲醇 G…...

汇编:数组-寻址取数据

比例因子寻址&#xff1a; 比例因子寻址&#xff08;也称为比例缩放索引寻址或基址加变址加比例因子寻址&#xff09;是一种复杂的内存寻址方式&#xff0c;常用于数组和指针操作。它允许通过一个基址寄存器、一个变址寄存器和一个比例因子来计算内存地址。 语法 比例因子寻…...

ROS自带的OpenCV库和自己安装版本冲突问题现象及解决方法

文章目录 1. 问题现象1.1 编译过程警告1.2 程序运行报错 2. 分析问题原因3. 解决方法 1. 问题现象 1.1 编译过程警告 warning: lipopencv_improc.so.406, needed by /usr/local/lib/libopencv_xfeatures2d.so.4.6.0, may conflict with libopencv_imgproc.so.4.21.2 程序运行…...

html+CSS+js部分基础运用19

1. 应用动态props传递数据&#xff0c;输出影片的图片、名称和描述等信息【要求使用props】&#xff0c;效果图如下&#xff1a; 2.在页面中定义一个按钮和一行文本&#xff0c;通过单击按钮实现放大文本的功能。【要求使用$emit()】 代码可以截图或者复制黏贴放置在“实验…...

51单片机驱动DS1302:从时序解析到精准电子钟实战

1. 初识DS1302&#xff1a;你的第一个实时时钟芯片 第一次接触DS1302时&#xff0c;我盯着这个只有8个引脚的小芯片看了半天——这么小的东西真的能准确记录时间吗&#xff1f;事实证明它不仅做得到&#xff0c;而且做得很好。DS1302是Dallas公司推出的一款经典实时时钟芯片&am…...

5G核心网UDR深度解析:从签约数据管理到策略数据存储的完整流程

5G核心网UDR深度解析&#xff1a;从签约数据管理到策略数据存储的完整流程 在5G核心网&#xff08;5GC&#xff09;架构中&#xff0c;统一数据仓储功能&#xff08;UDR&#xff09;扮演着数据中枢的角色。作为电信级网络的关键组件&#xff0c;UDR不仅需要处理海量用户数据的实…...

Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程

Qwen3-4B-Instruct-2507从入门到精通&#xff1a;Chainlit界面定制化教程 1. 引言&#xff1a;为什么选择Qwen3-4B-Instruct-2507&#xff1f; 如果你正在寻找一个既强大又轻量、既能快速部署又能灵活定制界面的AI模型&#xff0c;那么Qwen3-4B-Instruct-2507绝对值得你深入了…...

vLLM-v0.17.1效果展示:vLLM支持MoE模型(如Mixtral)推理实测

vLLM-v0.17.1效果展示&#xff1a;vLLM支持MoE模型&#xff08;如Mixtral&#xff09;推理实测 1. vLLM框架核心能力 vLLM是一个专注于大语言模型推理的高性能服务库&#xff0c;最新发布的v0.17.1版本带来了对MoE&#xff08;混合专家&#xff09;架构模型的全面支持。这个最…...

OpenClaw浏览器自动化:ollama-QwQ-32B驱动的研究资料收集系统

OpenClaw浏览器自动化&#xff1a;ollama-QwQ-32B驱动的研究资料收集系统 1. 为什么需要自动化研究资料收集 作为一名经常需要查阅大量文献的技术写作者&#xff0c;我长期被资料收集的效率问题困扰。传统工作流程中&#xff0c;我需要手动在Google Scholar、arXiv、知乎等平…...

智能体间通信实践指南

每个雄心勃勃的 AI 项目都会遇到这样的时刻&#xff1a;你碰壁了。你有一个强大的语言模型&#xff0c;你让它做一些复杂的事情——也许从三十个不同角度研究一个主题,或者从头开始构建整个营销活动——但它就是……无法把所有东西整合在一起。上下文变得太大。任务太分散。输出…...

AI 模型推理框架性能分析与对比

AI模型推理框架性能分析与对比 随着人工智能技术的快速发展&#xff0c;AI模型推理框架成为支撑各类应用落地的核心工具。无论是计算机视觉、自然语言处理还是推荐系统&#xff0c;高效的推理框架直接影响模型的响应速度、资源占用和部署成本。本文将从多个维度对比主流AI推理…...

ssm+java2026年毕设司库管理系统【源码+论文】

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于企业理财与融资管理问题的研究&#xff0c;现有研究主要以大型企业ERP系统或通用财务管理软件为主&#xff0c;专门针对中…...

时间切片:24小时

基于双层优化的电动汽车优化调度研究 代码主要做的是一个双层的电动汽车充放电行为优化问题&#xff0c;具体来讲&#xff0c;输电网上层优化将电动汽车与发电机、基本负荷协调&#xff0c;同时考虑风力发电&#xff0c;从而在时域内优化电动汽车的负荷周期。 然后&#xff0c;…...

OpenClaw性能调优:Qwen3-32B在RTX4090D上的参数配置

OpenClaw性能调优&#xff1a;Qwen3-32B在RTX4090D上的参数配置 1. 为什么需要性能调优 当我第一次在RTX4090D上部署Qwen3-32B模型时&#xff0c;本以为高端硬件能轻松应对所有任务。但实际使用OpenClaw执行自动化流程时&#xff0c;却发现响应时快时慢&#xff0c;有时甚至出…...