如何调查 imp.load_module 上的 python2 段错误

2024-03-29

我正在尝试安装和使用dolfin https://aur.archlinux.org/packages/dolfin-bzr/在 Arch Linux 上,使用 Python 2.7.3。

找出导致分段的原因的最佳方法是什么 诸如此类的故障?

$ python2 -c "import dolfin; print dolfin.__version__"
[3]    6491 segmentation fault (core dumped)  python2 -c "import dolfin; print 
dolfin.__version__"

我尝试通过 gdb 检查核心文件:

$ sudo systemd-coredumpctl gdb 6491

但它们总是被截断:

Reading symbols from /usr/bin/python2.7...(no debugging symbols
found)...done.
BFD: Warning: /var/tmp/coredump-wSi8DV is truncated: expected
core file size >= 39694336, found: 25165824.
warning: core file may not match specified executable file.
[New LWP 7056]
Cannot access memory at address 0x7fe70be0d148
Cannot access memory at address 0x7fe70be0d140

我尝试在命令之间添加“打印”语句并有 跟踪问题到这个 load_module 行,它加载一个 swig 构建的模块:

fp, pathname, description = imp.find_module('_common', [dirname(__file__)])
print "_mod = imp.load_module('_common', \n\tfp=%s, \n\tpathname=%s, \n\tdescription=%s)" % ( fp, pathname, description)
_mod = imp.load_module('_common', fp, pathname, description)

并且“打印”行打印以下内容,看起来是正确的:

_mod = imp.load_module('_common', 
        fp=<open file '_common.so', mode 'rb' at 0x282d150>, 
        pathname=_common.so, 
        description=('.so', 'rb', 3))
[1]    9039 segmentation fault (core dumped)  python2 -c "import dolfin; print dolfin.__version__"

我尝试在模块开始时添加 sys.settrace 以获得更多 信息,但这并没有发生。

因此,我检查了它尝试的共享库的链接 加载:

$ ldd _common.so
    libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f52fe960000)
    libavformat.so.54 => /lib64/libavformat.so.54 (0x00007f52fe61d000)
    libavcodec.so.54 => /lib64/libavcodec.so.54 (0x00007f52fd6bb000)
    libavutil.so.51 => /lib64/libavutil.so.51 (0x00007f52fd48d000)
    libswscale.so.2 => /lib64/libswscale.so.2 (0x00007f52fd240000)
    libvtkImaging.so.5.10 => /usr/lib/vtk-5.10/libvtkImaging.so.5.10 (0x00007f52fcb6e000)
    libvtkftgl.so.5.10 => /usr/lib/vtk-5.10/libvtkftgl.so.5.10 (0x00007f52fc960000)
    libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007f52fc6c1000)
    libQtGui.so.4 => /lib64/libQtGui.so.4 (0x00007f52fba1d000)
    libQtCore.so.4 => /lib64/libQtCore.so.4 (0x00007f52fb546000)
    libGL.so.1 => /lib64/libGL.so.1 (0x00007f52fb223000)
    libXt.so.6 => /lib64/libXt.so.6 (0x00007f52fafbc000)
    libvtkParallel.so.5.10 => /usr/lib/vtk-5.10/libvtkParallel.so.5.10 (0x00007f52faabd000)
    libvtkexoIIc.so.5.10 => /usr/lib/vtk-5.10/libvtkexoIIc.so.5.10 (0x00007f52fa877000)
    libvtkVolumeRendering.so.5.10 => /usr/lib/vtk-5.10/libvtkVolumeRendering.so.5.10 (0x00007f52f9fdf000)
    libQtWebKit.so.4 => /lib64/libQtWebKit.so.4 (0x00007f52f81f9000)
    libQtSql.so.4 => /lib64/libQtSql.so.4 (0x00007f52f7fb9000)
    libQtNetwork.so.4 => /lib64/libQtNetwork.so.4 (0x00007f52f7c81000)
    libvtkViews.so.5.10 => /usr/lib/vtk-5.10/libvtkViews.so.5.10 (0x00007f52f7993000)
    libvtkInfovis.so.5.10 => /usr/lib/vtk-5.10/libvtkInfovis.so.5.10 (0x00007f52f7357000)
    libpci.so.3 => /usr/lib/libpci.so.3 (0x00007f52f714b000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f52f6f2b000)
    libcblas.so => /usr/lib/libcblas.so (0x00007f52f6d0a000)
    libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f52f6a9f000)
    libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f52f6696000)
    libhdf5_hl.so.7.4.0 => /lib64/libhdf5_hl.so.7.4.0 (0x00007f52f6465000)
    librtmp.so.0 => /lib64/librtmp.so.0 (0x00007f52f6249000)
    libva.so.1 => /lib64/libva.so.1 (0x00007f52f6031000)
    libxvidcore.so.4 => /lib64/libxvidcore.so.4 (0x00007f52f5d19000)
    libx264.so.128 => /lib64/libx264.so.128 (0x00007f52f59ca000)
    libvpx.so.1 => /lib64/libvpx.so.1 (0x00007f52f5729000)
    libvorbisenc.so.2 => /lib64/libvorbisenc.so.2 (0x00007f52f525a000)
    libvorbis.so.0 => /lib64/libvorbis.so.0 (0x00007f52f502d000)
    libtheoraenc.so.1 => /lib64/libtheoraenc.so.1 (0x00007f52f4def000)
    libtheoradec.so.1 => /lib64/libtheoradec.so.1 (0x00007f52f4bd4000)
    libspeex.so.1 => /lib64/libspeex.so.1 (0x00007f52f49bb000)
    libschroedinger-1.0.so.0 => /lib64/libschroedinger-1.0.so.0 (0x00007f52f46ef000)
    libopenjpeg.so.1 => /lib64/libopenjpeg.so.1 (0x00007f52f44c7000)
    libopencore-amrwb.so.0 => /lib64/libopencore-amrwb.so.0 (0x00007f52f42b3000)
    libopencore-amrnb.so.0 => /lib64/libopencore-amrnb.so.0 (0x00007f52f4088000)
    libmp3lame.so.0 => /lib64/libmp3lame.so.0 (0x00007f52f3e11000)
    libgsm.so.1 => /lib64/libgsm.so.1 (0x00007f52f3c06000)
    libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f52f390f000)
    libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f52f36c1000)
    libSM.so.6 => /lib64/libSM.so.6 (0x00007f52f34b9000)
    libICE.so.6 => /lib64/libICE.so.6 (0x00007f52f329c000)
    libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f52f3091000)
    libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f52f2e57000)
    libXext.so.6 => /lib64/libXext.so.6 (0x00007f52f2c43000)
    libnvidia-tls.so.310.19 => /lib64/libnvidia-tls.so.310.19 (0x00007f52f2a40000)
    libnvidia-glcore.so.310.19 => /lib64/libnvidia-glcore.so.310.19 (0x00007f52f054d000)
    libVPIC.so.5.10 => /usr/lib/vtk-5.10/libVPIC.so.5.10 (0x00007f52f0328000)
    libCosmo.so.5.10 => /usr/lib/vtk-5.10/libCosmo.so.5.10 (0x00007f52f00e0000)
    libsqlite3.so.0 => /lib64/libsqlite3.so.0 (0x00007f52efe33000)
    libgstapp-0.10.so.0 => /lib64/libgstapp-0.10.so.0 (0x00007f52efc27000)
    libgstinterfaces-0.10.so.0 => /lib64/libgstinterfaces-0.10.so.0 (0x00007f52efa14000)
    libgstpbutils-0.10.so.0 => /lib64/libgstpbutils-0.10.so.0 (0x00007f52ef7f0000)
    libgstvideo-0.10.so.0 => /lib64/libgstvideo-0.10.so.0 (0x00007f52ef5d4000)
    libgstbase-0.10.so.0 => /lib64/libgstbase-0.10.so.0 (0x00007f52ef37f000)
    libgstreamer-0.10.so.0 => /lib64/libgstreamer-0.10.so.0 (0x00007f52ef096000)
    libvtkalglib.so.5.10 => /usr/lib/vtk-5.10/libvtkalglib.so.5.10 (0x00007f52eee75000)
    libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f52eec5e000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f52eea5a000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f52ee853000)
    libogg.so.0 => /lib64/libogg.so.0 (0x00007f52ee64d000)
    liborc-0.4.so.0 => /lib64/liborc-0.4.so.0 (0x00007f52ee3d1000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f52ee16e000)
    libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f52edf6b000)
    libffi.so.6 => /lib64/libffi.so.6 (0x00007f52edd63000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f52edb5e000)
    libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f52ed959000)

我读到段错误可能是由共享库引起的 与使用(或链接?)a 构建的库链接 另一个库的不同版本,但我如何找出哪个版本 造成麻烦?谢谢。

Update

如果我使用 ltrace 启动 Python 解释器,那么它就会工作(这之前会导致如上所述的段错误):

$ ltrace python2
__libc_start_main(0x400710, 1, 0x7fff640c6f38, 0x400810 <unfinished ...>
Py_Main(1, 0x7fff640c6f38, 0x7fff640c6f48, 0x400710Python 2.7.3 (default, Dec 12 2012,07:12:24) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from dolfin import *
>>>

为什么 ltrace 运行时没有段错误?

Update 2

事实证明,通过 CMake 使用 -DCMAKE_BUILD_TYPE=Debug 进行配置仍然允许将优化标志“-O”传递给 g++。我将尝试使用调试符号(标志“-g”)进行重建,看看效果如何。

Update 3

使用 -g 标志进行编译没有什么区别。

Update 4

直接从 gdb 运行不会暴露分段错误(大概它使用某种形式的 ltrace,如上所述):

$ gdb --args python2 -c "import dolfin; print dolfin.__version__"
GNU gdb (GDB) 7.5.1
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/bin/python2...(no debugging symbols found)...done.
(gdb) run
Starting program: /usr/bin/python2 -c import\ dolfin\;\ print\ dolfin.__version__
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Traceback (most recent call last):
  File "/usr/share/gdb/auto-load/usr/lib/libgobject-2.0.so.0.3400.3-gdb.py", line 9, in <module>
from gobject import register
  File "/usr/share/glib-2.0/gdb/gobject.py", line 3, in <module>
    import gdb.backtrace
ImportError: No module named backtrace
1.0.0+
[Inferior 1 (process 8008) exited normally]
(gdb)

我尝试过通过 gdb 检查核心文件...但它们总是被截断

在实时进程上使用 GDB:

gdb --args python2 -c "import dolfin; print dolfin.__version__"
(gdb) run
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调查 imp.load_module 上的 python2 段错误 的相关文章

随机推荐

  • “永久”SessionFactory、ASP.NET MVC 和 nHibernate

    我一直在使用 Fluent nHibernate ASP NET MVC 构建一个应用程序 我已经深入研究并发现保持 永久 SessionFactory 打开 然后对数据库的每个请求使用会话被认为是最合适的做法 好吧 这听起来不错 不过 我
  • iOS僵尸检测

    在我看来 我的代码中遇到了一个非常困难的问题 它在代码中的不同位置随机崩溃 该项目是一个ARC项目 所以我的程序偶尔会崩溃并显示以下消息 malloc error for object 0xd2dd8b0 incorrect checksu
  • 使用正则表达式计算字符串中的元音

    我刚刚开始学习 JavaScript 却陷入了正则表达式的困境 该程序应该计算输入字符串中元音的数量并显示元音 如果元音没有放在一起 程序运行良好 但如果元音出现在一起 则不会给出正确的值 e g 树 元音将显示为 ee 计数将为 1 Ty
  • RabbitMQ C# API:如何检查绑定是否存在?

    使用 RabbitMQ C API 我如何检查给定队列到给定交换是否存在绑定 很多 RabbitMQ 调用都是幂等的 所以有些人可能会说在这些情况下检查是不必要的 但我认为它们在测试中很有用 您可以使用他们的 REST API 来调用并查看
  • 为什么 sockJS 将“/info”添加到给定的 websocket url 路径

    我想打开一个带有 webapp socket do 路径的 websocket 端口 当我使用 SockJS 并尝试通过代码发起调用时 var socket new SockJS webapp socket do stompClient S
  • sizeof(*ptr) 和 sizeof(struct) 之间的区别

    我尝试了以下程序 struct temp int ab int cd int main int argc char argv struct temp ptr1 printf Sizeof struct temp d n sizeof str
  • Safari 中的 CSS 间距问题?

    我为我的最新项目制作了一个基于列表的导航栏 并在导航的每一侧添加了两个信息栏 它在 Firefox 和 IE 中的表现符合预期 但奇怪的是 Safari 却表现不佳 它在导航栏和右侧信息栏之间留出了很大的空间 CSS body backgr
  • Laravel 雄辩的变异器不适用于更新数据

    我的模型中有用于数据库表字段中的哈希 重新哈希数据的访问器和修改器 例如 public function setFullNameAttribute value this gt attributes full name Helper gete
  • 安装nodejs npm 和 grunt 出现错误

    我不熟悉 Python NodeJS NPM 或 Grunt 但我需要安装它 因为我想尝试一下Github项目 https github com raphaelluchini popcorntime smarttv 我从 node org
  • 如何在 AppFog 中使用 Apache 提供静态内容(WSGI Python 应用程序)

    我在用着AppFog http www appfog comPaaS 系统使用了几天 我喜欢它 它可能是我测试过的最好的 PaaS 系统 我之前使用过其他 3 个 但没有找到有关如何使用 Web 服务器提供静态内容的信息在前端 Apache
  • 从地图中获取一段键

    有没有更简单 更好的方法从 Go 中的映射中获取键的切片 目前我正在迭代地图并将键复制到切片 i 0 keys make int len mymap for k range mymap keys i k i 这是一个老问题 但这是我的两分钱
  • 在 C# 中获取特定时区的日期时间时出现 System.TimeZoneNotFoundException 错误

    我有一个 JSON 文件 其中包含time zone范围 它的值如下London Casablanca Arizona Pacific Time US Canada 等 基于time zone 我想得到DateTime该时区的结果 例如 C
  • Ubuntu 17.04 上 sudo apt-get 更新失败

    运行时sudo apt get update在 ubuntu 17 04 Zesty Zapus 上 我收到以下错误 我已经在错误行上发布了 我想安装 python 库 如 matplotlib 和 tkinter 但由于上述命令未成功运行
  • CSS 文件和不需要的覆盖

    我有一个简单的 HTML 页面 它引用了 3 个 CSS 文件 第一个是仅适用于页面的样式表 另外两个是针对两个独特情态动词的样式 这些模态 CSS 文件不是我创建的 它们很高兴被使用分别地在整个网站的其他页面上 我的问题是 这两个模态 C
  • 1-2 秒后暂停 YouTube 视频

    我正在使用 Youtube Player api 在我的应用程序中播放 YouTube 视频 视频开始播放并在 1 2 秒后暂停 我创建了视频片段和视图组 随后我创建了一些 youtobe 视频视图 视频片段 public static f
  • OpenCV 中 minEnclosureCircle 的意外结果

    我最近使用了 OpenCV 2 4 2 的函数 minEnendingCircle 因为我需要测量一团点的直径 一段时间后 我意识到结果不正确 因此我决定编写一个小例程来计算一组非常小的点的直径 我测试了该函数 1个单点 连续2 4分 仅由
  • 保留一个新对象而无需获取关联

    我在广告实体中有以下映射 class Ad Id Column name id unique true nullable false GeneratedValue strategy GenerationType SEQUENCE gener
  • 实现 ActiveRecord before_find

    我正在使用缓存在表中的关键字构建搜索 在表中查找用户输入的关键字之前 它会被标准化 例如 删除了一些标点符号 如 并对大小写进行了标准化 然后使用规范化的关键字来查找获取搜索结果 我目前正在使用 before filter 处理控制器中的标
  • 导入 React-Router-Dom 后 React App 变为空白

    导入前react router一切正常 现在它构建成功但显示空白页面 这是我的代码 App js import ReactDOM from react dom client import BrowserRouter Routes Route
  • 如何调查 imp.load_module 上的 python2 段错误

    我正在尝试安装和使用dolfin https aur archlinux org packages dolfin bzr 在 Arch Linux 上 使用 Python 2 7 3 找出导致分段的原因的最佳方法是什么 诸如此类的故障 py