当前位置: 首页 > 面试题库 >

错误:分段错误(核心已转储)

秦锐
2023-03-14
问题内容

我是python的新手,正在遇到一个奇怪的错误:

Segmentation fault (core dumped)

当我执行以下代码时:

  class Workspace(QMainWindow, Ui_MainWindow):
    """ This class is for managing the whole GUI `Workspace'.
        Currently a Workspace is similar to a MainWindow
    """

    def __init__(self):
        #p= subprocess.Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/', shell=True, stdout=subprocess.PIPE, bufsize= 4024)
        try:
            from Queue import Queue, Empty
        except ImportError:
            while True:
    #from queue import Queue, Empty  # python 3.x
                print "error"

        ON_POSIX = 'posix' in sys.builtin_module_names

        def enqueue_output(out, queue):
            for line in iter(out.readline, b''):
                queue.put(line)
            out.close()

        p= Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/',stdout=PIPE, shell=True, bufsize= 4024)
        q = Queue()
        t = threading.Thread(target=enqueue_output, args=(p.stdout, q))
        #t = Thread(target=enqueue_output, args=(p.stdout, q))
        t.daemon = True # thread dies with the program
        t.start()

# ... do other things here
        def myfunc(q):
            while True:

                try: line = q.get_nowait()
         # or q.get(timeout=.1)
                except Empty:
                    print('Vacio')
                else: # got line
    # ... do something with line

                    print line


        thread = threading.Thread(target=myfunc, args=(q,))
        thread.start()

这部分代码是从程序的stdout中读取的。当我myfunc在线程外执行 时,它将起作用!但是当我在fais线程中执行它时…有什么建议吗?


问题答案:

"Segmentation fault (core dumped)"是当程序退出并带有SIGSEGV信号并且启用了核心创建时Linux打印的字符串。这意味着 某些 程序已崩溃。

如果您实际上是通过运行Python遇到此错误,则意味着Python解释器已崩溃。发生这种情况只有几个原因:

  1. 您正在使用用C编写的第三方扩展模块,并且该扩展模块已崩溃。

  2. 您(直接或间接)使用内置模块ctypes,并调用崩溃的外部代码。

  3. 您的Python安装有问题。

  4. 您发现了应该报告的Python错误。

首先是迄今为止最常见的。如果您q是某个第三方扩展模块中某个对象的实例,则可能需要查看文档。

通常,当C模块崩溃时,这是因为您所做的事情是无效的,或者至少是不常见且未经测试的。但是,从某种意义上说,这是否是您的“过失”都没关系。该模块
引发可调试的Python异常,而不是崩溃。因此,您可能应该向编写扩展的人员报告错误。但是,与此同时,您无需等待6个月的时间来修复错误并发布新版本,而是需要弄清楚触发崩溃的原因是什么,以及是否有其他方法可以实现所需的功能。或切换到其他库。

另一方面,由于您正在从其他地方读取和打印数据,因此您的Python解释器可能会读取该行"Segmentation fault (core dumped)"并忠实地打印所读取的内容。在这种情况下,其他上游程序可能崩溃了。(甚至可能没有人崩溃—如果您从Web上获取此页面并打印出来,您将得到同一行,对吗?)在您的情况下,根据您的评论,可能是Java程序崩溃了。

如果您不确定是哪种情况(并且今天不想学习如何进行过程管理,核心文件检查或C级调试),则有一种简单的测试方法:在print line添加一行之后print "And I'm OK"。如果您看到那Segmentation fault行之后,那么Python并没有崩溃,其他人却崩溃了。如果您没有看到它,则可能是Python崩溃了。



 类似资料:
  • 我正在使用ASP.NET内核。我正在创建一个基本的WebAPI。我想在出现问题时显示一个JSON错误。 打印屏幕在我的屏幕上显示want I want。唯一的问题是它的发送状态码为200。 我可以通过这样做来解决问题: 真诚的,布莱希特

  • 问题内容: 我已经按照从Anaconda在Linux上将Matlab Engine安装 到运行Python3.5的Anaconda虚拟环境的答案中的说明安装了官方的MATLAB Engine 。我现在可以导入并且不会收到错误。但是,当我尝试:时 ,出现“分段错误(核心已转储)” 我尝试从conda环境中设置LD_LIBRARY_PATH(以防万一,即使相关):,但无济于事。据我所知,该路径也不存在

  • 运行 rspec 测试时,我突然收到以下错误: /Users/username/.rvm/gems/ruby-2.3.0@rem2/gems/ruby-debug-ide-0.6.0/bin/rdebug-ide --disable-int-handler --evaluation-timeout 10 --rubymine-protocol-extensions --port 50027 --d

  • 问题内容: 我已经将go源代码使用克隆到了我的目录(文档建议在GOPATH之外)。 我的$ GOPATH是 我使用官方的osx安装程序安装了go 1.8.1。 如果我进入并运行,则会出现以下错误: 在按照此处的指示进行操作之后,仍然出现以下错误: 的确,〜/ gocode / src / golang_org / x / net下没有代理程序包,但是我仍然不知道如何解决该问题以及其他2个错误。 如

  • 我在我的应用程序中使用HMS核心插件(Huawei Location Kit),在调试模式下一切正常,但当我打开它的发布模式时,它抛出了以下错误,尽管我可以正常访问Huawei Location Kit: 我不知道是什么引起了这个问题。有什么想法吗?

  • 我试图在我的应用程序中使用Firebase。 在Gradle中添加三行后,我得到了这个错误: 错误:(27,13)未能解析:com.google.firebase:firebase核心:9.8.0 以下是我的代码的一些图像: 为什么我得到这个错误?