Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 如何调查imp.load_模块上的python2 segfault_Cmake_Shared Libraries_Swig_Python 2.x_Archlinux - Fatal编程技术网

Cmake 如何调查imp.load_模块上的python2 segfault

Cmake 如何调查imp.load_模块上的python2 segfault,cmake,shared-libraries,swig,python-2.x,archlinux,Cmake,Shared Libraries,Swig,Python 2.x,Archlinux,我正在尝试在ArchLinux上安装和使用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-cor

我正在尝试在ArchLinux上安装和使用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
我曾尝试在命令和命令之间添加“print”语句 将问题追溯到加载模块行,该行加载 由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__"
我已经了解到SEGFULT可能是由共享库引起的 与使用(或与?)链接的库链接 另一个库的不同版本,但我如何找出哪一个 惹麻烦了?谢谢

更新

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

$ltrace python2
__libc_start_main(0x400710,1,0x7fff640c6f38,0x400810
Py_Main(0x7fff640c6f38、0x7fff640c6f48、0x400710Python2.7.3)(默认值,2012年12月12日,07:12:24)
[GCC 4.7.2]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>从多尔芬进口*
>>>
为什么ltrace运行时没有SEGFULT

更新2

事实证明,通过使用-DCMAKE\u BUILD\u TYPE=Debug的CMake进行配置仍然允许将优化标志'-O'传递给g++。我将尝试使用调试符号(标志'-g')进行重建,然后看看如何进行

更新3

使用-g标志编译没有任何区别

更新4

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

$gdb--args python2-c“导入dolfin;打印dolfin.\uu版本”
GNU gdb(gdb)7.5.1
版权所有(C)2012免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不提供任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“x86_64-unknown-linux-gnu”。
有关错误报告说明,请参阅:
...
正在从/usr/bin/python2读取符号…(未找到调试符号)…已完成。
(gdb)运行
正在启动程序:/usr/bin/python2-c import\dolfin\\print\dolfin.\uu版本__
警告:无法加载linux vdso.so.1的共享库符号。
您需要“设置solib搜索路径”还是“设置系统根”?
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/usr/lib/libthread_db.so.1”。
回溯(最近一次呼叫最后一次):
文件“/usr/share/gdb/auto-load/usr/lib/libgobject-2.0.so.0.3400.3-gdb.py”,第9行,在
从gobject导入寄存器
文件“/usr/share/glib-2.0/gdb/gobject.py”,第3行,在
导入gdb.backtrace
ImportError:没有名为backtrace的模块
1.0.0+
[次品1(流程8008)正常退出]
(gdb)
我曾尝试通过gdb检查核心文件…但它们总是被截断

改为在实时进程上使用GDB:

gdb --args python2 -c "import dolfin; print dolfin.__version__"
(gdb) run

我和Novidia的司机有过类似的问题。英伟达的驱动程序我从最新的时候又把它滚回来了。我必须通过VA/log/消息来找到核心转储,用GDB运行它。在上面的某个地方是Nvidia图书馆。

谢谢雇佣的俄罗斯人,但是当我运行它时,SeGebug就不会发生了。y编辑我的问题,“Update 4”@myles GDB做的一件事就是禁用地址随机化。也许这就是为什么你看不到GDB下的崩溃。你可以在
(GDB)
提示符下用
将禁用地址随机化设置为off
重新启用它(在输入
运行
命令之前)。然后
运行几次。
$ 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 *
>>>
$ 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 --args python2 -c "import dolfin; print dolfin.__version__"
(gdb) run