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

【QA】Python代码调试之解决Segmentation fault (core dumped)问题

Python代码调试之解决Segmentation fault 问题

  • 问题描述
  • 排查过程
    • 1. 定位错误,
    • 2. 解决办法
  • 参考资料

问题描述

Python3执行某一个程序时,报Segmentation fault (core dumped)错,且没有其他任何提示,无法查问题。

Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。

排查过程

错误排查过程如下:

1. 定位错误,

第一种方式是利用python3的faulthandler,可定位到出错的代码行,具体操作有两种方式如下:
(1) 在代码中写入faulthandler

import faulthandler
# 在import之后直接添加以下启用代码即可
faulthandler.enable()
# 后边正常写你的代码

(2)直接通过命令行来启用,运行时添加-X faulthandler参数即可:

python -X faulthandler your_script.py

这里我们为了保持代码的纯洁,选用第二种方式

再次执行主程序,发现输出的信息很多了:

Fatal Python error: Segmentation faultCurrent thread 0x00007f9f89fa8740 (most recent call first):File "/home/xinzhepang/anaconda3/envs/train/lib/python3.9/ctypes/__init__.py", line 374 in __init__File "/home/xinzhepang/anaconda3/envs/train/lib/python3.9/site-packages/torch/_ops.py", line 255 in load_libraryFile "/home/xinzhepang/anaconda3/envs/train/lib/python3.9/site-packages/torch_sparse/__init__.py", line 19 in <module>File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removedFile "<frozen importlib._bootstrap_external>", line 850 in exec_moduleFile "<frozen importlib._bootstrap>", line 680 in _load_unlockedFile "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 1007 in _find_and_loadFile "/home/xinzhepang/anaconda3/envs/train/lib/python3.9/site-packages/torch_geometric/data/data.py", line 20 in <module>File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removedFile "<frozen importlib._bootstrap_external>", line 850 in exec_moduleFile "<frozen importlib._bootstrap>", line 680 in _load_unlockedFile "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 1007 in _find_and_loadFile "/home/xinzhepang/anaconda3/envs/train/lib/python3.9/site-packages/torch_geometric/data/__init__.py", line 1 in <module>File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removedFile "<frozen importlib._bootstrap_external>", line 850 in exec_moduleFile "<frozen importlib._bootstrap>", line 680 in _load_unlockedFile "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 1007 in _find_and_loadFile "/home/xinzhepang/anaconda3/envs/train/lib/python3.9/site-packages/torch_geometric/__init__.py", line 4 in <module>File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removedFile "<frozen importlib._bootstrap_external>", line 850 in exec_moduleFile "<frozen importlib._bootstrap>", line 680 in _load_unlockedFile "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 1007 in _find_and_loadFile "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removedFile "<frozen importlib._bootstrap>", line 972 in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 1007 in _find_and_loadFile "/home/xinzhepang/workspace/iGNC/scripts/bioinfo_training.py", line 6 in <module>File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removedFile "<frozen importlib._bootstrap_external>", line 850 in exec_moduleFile "<frozen importlib._bootstrap>", line 680 in _load_unlockedFile "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 1007 in _find_and_loadFile "/home/xinzhepang/workspace/iGNC/main.py", line 11 in <module>
./run_main.sh: line 2: 38634 Segmentation fault      (core dumped) python -X faulthandler main.py --use_cuda --batch_size 16 --num_workers 2

第二种方式是利用gdb,操作方式如下:

gdb python
(gdb) run /path/to/your_script.py
## wait for segfault ##
(gdb) backtrace
## stack trace of the py code

错误信息1
错误信息2
追踪产生segmenttation fault的位置及代码函数调用情况:

gdb>bt

这样,一般就可以看到出错的代码是哪一句了,还可以打印出相应变量的数值,进行进一步分析。另外需要注意的是,如果机器上跑很多的应用,生成的core又不知道是哪个应用产生的,可以通过下列命令进行查看:file core

可以看到出错的地方是:torch/lib/libtorch_cpu.so

我们执行如下代码:

>>> import torch
>>> print(torch.cuda.current_device())
0
>>> print(torch.cuda.is_available())
True

然后,执行nvidia-smi命令可知,我们有4块显卡:

Thu Apr 20 11:14:37 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.182.03   Driver Version: 470.182.03   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA TITAN X ...  Off  | 00000000:02:00.0 Off |                  N/A |
| 25%   45C    P8    13W / 250W |      0MiB / 12196MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA TITAN X ...  Off  | 00000000:03:00.0 Off |                  N/A |
| 28%   50C    P8    12W / 250W |      0MiB / 12196MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  NVIDIA TITAN X ...  Off  | 00000000:82:00.0 Off |                  N/A |
| 31%   55C    P8    13W / 250W |      0MiB / 12196MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   3  NVIDIA TITAN X ...  Off  | 00000000:83:00.0 Off |                  N/A |
| 30%   53C    P8    13W / 250W |      0MiB / 12196MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

查看nvcc的版本:

(train) xxxxx@air:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Mar_21_19:15:46_PDT_2021
Cuda compilation tools, release 11.3, V11.3.58
Build cuda_11.3.r11.3/compiler.29745058_0

因此,我们怀疑是CUDA、显卡驱动、pytorch、pytorchvision、torch_scatter、torch_sparse、torch_geometric版本不对应。

2. 解决办法

我们选择重新安装Pytorch 1.10

conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge

什么是Core:
在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。如今 ,半导体工业澎勃发展,已经没有人用 core memory 了,不过,在许多情况下,人们还是把记忆体叫作 core 。

什么是Core Dump:
我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger 做为参考。这个动作就叫作 core dump。

参考资料

  1. 记录一次Pytorch使用中遇到Segmentation fault (core dumped)的经历
  2. python遇到Segmentation fault (core dumped)调试方法
  3. Segmentation fault (core dumped)错误常见原因总结

相关文章:

【QA】Python代码调试之解决Segmentation fault (core dumped)问题

Python代码调试之解决Segmentation fault 问题 问题描述排查过程1. 定位错误&#xff0c;2. 解决办法 参考资料 问题描述 Python3执行某一个程序时&#xff0c;报Segmentation fault (core dumped)错&#xff0c;且没有其他任何提示&#xff0c;无法查问题。 Segmentation fa…...

C++ 迭代器之旅(Journey of Iterators)

C 迭代器之旅&#xff08;Journey of Iterators&#xff09; 一、引言&#xff08;Introduction&#xff09;C Iterator模板库简介&#xff08;Overview of C Iterator Template Library&#xff09;Iterator的重要性和作用&#xff08;The Importance and Role of Iterators&a…...

使用全球融合CDN的10大优势

根据预估&#xff0c;今年的全球内容交付网络&#xff08;CDN&#xff09;市场预计将达到424亿美元。而由于移动应用程序的激增和人工智能尤其是ChatGPT等相关领域的快速发展将进一步带来CDN市场的快速增长&#xff0c;可以说全球CDN的黄金时代才刚开始。 融合CDN和多CDN战略是…...

前端学习:HTML图像、表格、列表

目录 图像 一、图像标签和源属性(Src) 二、替换文本属性(Alt) 三、设置图片样式基本属性 四、图像标签 表格 一、标签 补充: 二、表格的表头 三、表格常用标签和属性 标签 属性 列表 一、无序列表 二、有序列表 三、定义列表 四、列表常用标签属性 图像 一、…...

202305读书笔记|《因思念而沉着》——任何赞美都是身外之物唯自由可随身携带

《因思念而沉着》作者巴哑哑&#xff0c;忘了是什么时候加入的书架&#xff0c;昨天下班地铁上读完的书。是美的&#xff01; 部分节选如下&#xff1a; 羽叶茑萝举着熄灭的花青色的小枣落了一地所以哭泣沾染上了你的脸 在没落下 当我们开始生活 就是开始患上了眼疾你独自悲伤…...

M1 M2上能安装上Autocad 2024 Mac 中文版吗 autocad m1 m2版本有啦 终于支持Ventura 13x了

AutoCAD是一款强大的工具&#xff0c;适合于各种领域的设计和绘图。它具有二维图形和三维建模功能、多种文件格式支持、自定义命令和样式、批处理和脚本等特点&#xff0c;可以帮助用户实现高质量的设计和建模。同时&#xff0c;还支持云端存储和共享&#xff0c;方便用户随时随…...

【题解】P4055 [JSOI2009] 游戏

link 题目大意 题目说得比较清楚。 题解 前置知识&#xff1a;二分图最大匹配、基础博弈论。 每个点只能走一次的四联通点阵&#xff0c;可以想到二分图匹配。 将其套路地奇偶分点&#xff0c;相邻两点连边&#xff08;显然不能为 #&#xff09;。 先求一个最大匹配。 …...

P1020 [NOIP1999 普及组] 导弹拦截

题目描述 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。某天&#xff0c;雷达捕捉到敌国的导弹来袭。由于该系统…...

Makefile学习

什么是Makefile 使用 GCC 编译器在 Linux 进行 C 语言编译&#xff0c;通过在终端执行 gcc 命 令来完成 C 文件的编译&#xff0c;如果我们的工程只有一两个 C 文件还好&#xff0c;需要输入的命令不多&#xff0c;当文件有几十、上百甚至上万个的时候用终端输入 GCC 命令的方…...

2.4 随机变量函数的分布

学习目标&#xff1a; 学习随机变量函数的分布&#xff0c;我会采取以下步骤&#xff1a; 熟悉随机变量的基本概念和分布&#xff1a;在学习随机变量函数的分布之前&#xff0c;需要先掌握随机变量的基本概念和分布&#xff0c;包括离散型随机变量和连续性随机变量的概率密度…...

数据结构【一】:前缀表达式与后缀表达式的区别

在早期计息机系统中&#xff0c;由于没有括号规定运算顺序&#xff0c;因此&#xff0c;依靠出栈和入栈两种方式&#xff0c;限定元素和符号之间的关系确定了前缀表达式和后缀表达式两种运算方式&#xff0c;中缀表达式即为普通的运算表达式&#xff1b;注意&#xff0c;在栈结…...

搭建 PostgreSQL

端口&#xff1a;5432 代理备份端口&#xff1a;6432 下载 postgresql-15.0-1-windows-x64 乱码显示 配置环境变量 PGDATA数据目录位置 找到postgresql.conf文件&#xff0c; 修改参数 lc_messagesUTF8 max_connections 1000 shared_buffers4GB work_mem8MB 问题&#xff1a…...

Nmap入门到高级【第四章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…...

c++正则表达式及其使用,超级详细

文章目录 概述正则表达式语法正则表达式操作std::regex_matchstd::regex_replacestd::regex_search 实例匹配邮箱替换 HTML 标签搜索 URL 总结 概述 正则表达式是一种用于匹配字符串的工具&#xff0c;可以在文本中查找特定的模式&#xff0c;并且可以快速地对字符串进行搜索和…...

【LeetCode: 剑指 Offer II 099. 最小路径之和 | 暴力递归 | DFS =>记忆化搜索=>动态规划】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…...

Python OpenCV 计算机视觉:6~7

原文&#xff1a;OpenCV Computer Vision with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&#xff0c;你最…...

LabView中数组的使用2-1

在LabView中&#xff0c;数组用来管理相同类型的数据。 1 在前面板中创建数组 1.1 创建空数组 在前面板中创建数组时&#xff0c;首先在前面板中点击鼠标右键&#xff0c;弹出“控件”对话框&#xff0c;之后选择“新式->数组、矩阵与簇->数组”&#xff0c;在前面板中…...

Android 10.0 系统systemui下拉通知栏的通知布局相关源码分析

1.前言 在android10.0的系统rom开发中,在进行systemui中的下拉通知栏的布局自定义的时候,对于原生systemui的 系统的下拉通知栏的通知布局的了解也是非常重要的,接下来就来分析下相关的下拉通知栏的通知布局的相关 源码流程,了解这些才方便对通知栏的布局做修改 2.系统…...

研读Rust圣经解析——Rust learn-3(变量与可变性,数据类型)

研读Rust圣经解析——Rust learn-3&#xff08;变量与可变性&#xff0c;数据类型&#xff09; 变量|常量与可变性变量声明案例为什么不可变变量可变&#xff08;mut关键字&#xff09;变量可变&#xff08;覆盖&#xff09; 常量声明 数据类型标量类型整型整型字面值整型溢出问…...

接口的多继承多实现

接口的多继承多实现 目录 接口的多继承多实现多继承&#xff08;接口1 extends 接口2,接口3&#xff09;多实现&#xff08;实现类 实现 接口1&#xff0c;接口2&#xff09;总结1.类与类的关系2.类和接口的关系3.接口与接口的关系 多继承&#xff08;接口1 extends 接口2,接口…...

开源KMS激活神器:3分钟搞定Windows和Office永久激活难题

开源KMS激活神器&#xff1a;3分钟搞定Windows和Office永久激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题烦恼吗&#xff1f;KMS_VL_ALL_AIO是一款开…...

连接池为什么重要?从一次“数据库没打满,但应用越来越慢”的事故说起

连接池为什么重要&#xff1f;从一次“数据库没打满&#xff0c;但应用越来越慢”的事故说起 在很多后端系统里&#xff0c;数据库往往是最容易被怀疑的对象。 接口慢了&#xff0c;第一反应是&#xff1a; “是不是数据库扛不住了&#xff1f;” 订单页卡住了&#xff0c;第一…...

如何用Cyber Engine Tweaks终极解锁赛博朋克2077的完整定制体验:新手快速入门指南

如何用Cyber Engine Tweaks终极解锁赛博朋克2077的完整定制体验&#xff1a;新手快速入门指南 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks 你是否厌倦了…...

NotebookLM笔记导出全链路实操指南:从Chrome插件绕过限制到API直连导出(含Python脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM笔记导出全链路概览 NotebookLM 是 Google 推出的基于用户上传文档构建个性化知识代理的 AI 工具&#xff0c;其核心价值在于语义理解与上下文生成&#xff0c;但原生不提供直接导出原始笔记…...

告别Python依赖!手把手教你用C++复现Librosa的Mel频谱和MFCC特征提取

高性能C音频特征提取实战&#xff1a;从Librosa原理到嵌入式部署优化 在语音识别和音频分析领域&#xff0c;Mel频谱和MFCC特征提取是基础但关键的技术环节。许多开发者习惯使用Python的Librosa库快速实现原型&#xff0c;但当需要部署到生产环境时&#xff0c;Python的解释器性…...

2019 年旧作升级!用木材与电路打造更美观的电压表时钟

2019 年旧作升级&#xff01;用木材与电路打造更美观的电压表时钟早在 2019 年&#xff0c;作者制作了一个简单的电压表时钟&#xff0c;这类时钟使用模拟面板电压表来显示时间&#xff0c;而非传统钟面。不过&#xff0c;网上大多数此类设计过于复杂且不太美观&#xff0c;于是…...

告别串口线!用STM32CubeMX配置USB-CDC虚拟串口,实现与电脑免驱动通信(附Win7驱动安装指南)

STM32虚拟串口革命&#xff1a;USB-CDC免驱动通信全实战指南 嵌入式开发调试过程中&#xff0c;最令人头疼的莫过于频繁插拔串口线导致的接口松动、接触不良问题。传统串口调试不仅占用宝贵的UART资源&#xff0c;还常常因为物理连接问题浪费大量调试时间。本文将彻底改变这一局…...

VHDL转Verilog终极指南:如何用VHD2VL v3.0快速完成硬件描述语言转换

VHDL转Verilog终极指南&#xff1a;如何用VHD2VL v3.0快速完成硬件描述语言转换 【免费下载链接】vhd2vl 项目地址: https://gitcode.com/gh_mirrors/vh/vhd2vl 在FPGA开发领域&#xff0c;VHDL和Verilog是两大主流硬件描述语言&#xff0c;但团队协作或项目迁移时经常…...

Token工厂:从“卖流量”到“卖Token”:中国移动砸百亿建Token生态,三大运营商的AI战争升级,阿里,百度,华为,字节跟进

5月9日&#xff0c;2026移动云大会上&#xff0c;中国移动市场经营部总经理邱宝华扔出一个新概念——"Token运营体系"。未来3-5年&#xff0c;中国移动将投入百亿级Token生态资源&#xff0c;建设千亿级算力基础设施&#xff0c;携手共创万亿级AI产业价值。"百亿…...

空洞骑士模组管理器Scarab:2024年最全面的安装与管理指南

空洞骑士模组管理器Scarab&#xff1a;2024年最全面的安装与管理指南 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为空洞骑士模组安装的复杂流程而烦恼吗&#xff1f…...