簡體   English   中英

__init__外的python中的libSBML分段錯誤

[英]libSBML segmentation fault in python outside __init__

我正在嘗試使用python(2.x)中的libSBML將模型導出為一些自定義表示形式,但遇到了一個我不理解的錯誤。 在init方法中,我可以訪問從模型(self.sbSpecies)中提取的物種列表,但是在任何其他方法中嘗試執行相同操作都會導致分割錯誤。 這是最小的示例(需要從此歸檔文件“ yeast_7.11.xml”文件: yest7.11 ):

#! /usr/bin/env python

from libsbml import *

class Exporter(object):
    def __init__(self, path_to_file):
        reader = SBMLReader()
        sbmldoc = reader.readSBMLFromFile(path_to_file)
        self.sbModel = sbmldoc.getModel()
        self.sbSpecies = [x for x in self.sbModel.getListOfSpecies()]
        print 'init:', self.sbSpecies[0]

    def debug(self):
        print 'debug:', self.sbSpecies[0]

exporter = Exporter('yeast_7.11.xml')
species = exporter.debug()

試圖運行它給我:

$ ./minimal_example.py 
init: <Species s_0001 "(1->3)-beta-D-glucan [cell envelope]">
Segmentation fault

來自gdb(我不懂C或C ++,所以我無法真正理解正在發生的事情)

(gdb) run ./minimal_example.py
Starting program: /usr/bin/python ./minimal_example.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
init: <Species s_0001 "(1->3)-beta-D-glucan [cell envelope]">

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5ebffe0 in ?? () from /usr/lib/python2.7/dist-packages/libsbml/_libsbml.so
(gdb) backtrace
#0  0x00007ffff5ebffe0 in ?? () from /usr/lib/python2.7/dist-packages/libsbml/_libsbml.so
#1  0x0000000000502be0 in PyObject_CallFunction ()
#2  0x00000000004f8aa9 in _PyObject_GenericGetAttrWithDict ()
#3  0x00000000004ce145 in ?? ()
#4  0x00000000004cd95f in ?? ()
#5  0x000000000052c6d5 in PyEval_EvalFrameEx ()
#6  0x000000000056d0aa in ?? ()
#7  0x00000000004d9854 in ?? ()
#8  0x00000000004da29f in PyEval_CallObjectWithKeywords ()
#9  0x0000000000599269 in ?? ()
#10 0x00000000005165dc in PyObject_Str ()
#11 0x00000000005b52e3 in ?? ()
#12 0x000000000051694b in PyFile_WriteObject ()
#13 0x000000000052ffdd in PyEval_EvalFrameEx ()
#14 0x000000000052cf32 in PyEval_EvalFrameEx ()
#15 0x000000000055c594 in PyEval_EvalCodeEx ()
#16 0x00000000005b7392 in PyEval_EvalCode ()
#17 0x0000000000469663 in ?? ()
#18 0x00000000004699e3 in PyRun_FileExFlags ()
#19 0x0000000000469f1c in PyRun_SimpleFileExFlags ()
#20 0x000000000046ab81 in Py_Main ()
#21 0x00007ffff7817ec5 in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#22 0x000000000057497e in _start ()

有什么想法為什么要通過不同的方法訪問同一對象(self.sbSpecies列表)會導致如此不同的行為? 我該如何解決(除了扔掉對象之外)?

我設法通過添加自我解決了這個問題。 到sbmldoc。

似乎self.sbSpecies中的libSBML對象仍然指向sbmldoc中的某物,但是python由於某種原因無法跟蹤該事件,並且會破壞sbmldoc,除非被告知不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM