首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python分段错误,../sysdeps/unix/sysv/linux/rise.c:没有这样的文件或目录

Python分段错误,../sysdeps/unix/sysv/linux/rise.c:没有这样的文件或目录
EN

Stack Overflow用户
提问于 2021-06-17 07:41:31
回答 2查看 610关注 0票数 0

我用PyInstaller创建了GUI应用程序的一个文件可执行文件。一切看起来都很好,可执行文件被创建并启动。首先,正确地显示了登录页面,但是在插入用户名和密码之后,程序就崩溃了。我试着用gdb进行调试,这就是我得到的结果:

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.
raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50
50  ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x000055555555a213 in ?? ()
#2  0x000055555555815d in ?? ()
#3  0x00007ffff7da10b3 in __libc_start_main (main=0x5555555564d0, argc=1, 
    argv=0x7fffffffdec8, init=<optimized out>, fini=<optimized out>, 
    rtld_fini=<optimized out>, stack_end=0x7fffffffdeb8)
    at ../csu/libc-start.c:308
#4  0x000055555555650a in ?? ()

有人能解释一下这意味着什么以及如何解决吗?

登录页代码:

代码语言:javascript
复制
import json
import wx
from pubsub import pub


class LoginPage(wx.Dialog):
    def __init__(self):
        """Constructor"""
        wx.Dialog.__init__(self, None, title="Login", size=(750, 750), style=wx.DEFAULT_DIALOG_STYLE)
        self.password_shown = False

        # username
        username_sizer = wx.BoxSizer(wx.HORIZONTAL)

        username_lbl = wx.StaticText(self, label="Username:")
        username_sizer.Add(username_lbl, 1, wx.ALL | wx.CENTER, 5)
        self.username_txt = wx.TextCtrl(self)
        username_sizer.Add(self.username_txt, 3, wx.ALL | wx.EXPAND, 5)

        # pass info
        pass_sizer = wx.BoxSizer(wx.HORIZONTAL)

        p_lbl = wx.StaticText(self, label="Password:")
        pass_sizer.Add(p_lbl, 1, wx.ALL | wx.CENTER, 5)
        self.pass_txt = wx.TextCtrl(self, style=wx.TE_PASSWORD | wx.TE_PROCESS_ENTER)
        pass_sizer.Add(self.pass_txt, 3, wx.ALL | wx.EXPAND, 5)
        self.text_no_password = wx.TextCtrl(self)
        self.text_no_password.Hide()
        pass_sizer.Add(self.text_no_password, 3, wx.ALL, 5)
        self.show_pwd_cb = wx.CheckBox(self, -1, "Show password")
        pass_sizer.Add(self.show_pwd_cb, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
        self.show_pwd_cb.Bind(wx.EVT_CHECKBOX, self.onShow)

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(username_sizer, 0, wx.ALL, 5)
        main_sizer.Add(pass_sizer, 0, wx.ALL, 5)

        btn = wx.Button(self, label="Login")
        btn.Bind(wx.EVT_BUTTON, self.onLogin)
        main_sizer.Add(btn, 0, wx.ALL | wx.CENTER, 5)

        self.SetSizer(main_sizer)

    def onLogin(self, event):
        """
        Check credentials and login
        """
        user = str(self.username_txt.GetValue())
        pwd = str(self.pass_txt.GetValue()) if not self.password_shown else str(self.text_no_password.GetValue())

        with open("UIcomponents/login.js", "r") as f:
            credentials = json.load(f)
        if user != credentials["User"] or pwd != credentials["Pwd"]:
            wx.LogError("Username or password are not correct. Please, try again")
            return
        with open("UIcomponents/login.js", "w") as f:
            json.dump(credentials, f)

        pub.sendMessage("loginListener", message="logged in")
        self.Destroy()

    def onShow(self, event):
        self.pass_txt.Show(self.password_shown)
        self.text_no_password.Show(not self.password_shown)
        if not self.password_shown:
            self.text_no_password.SetValue(self.pass_txt.GetValue())
            self.text_no_password.SetFocus()
        else:
            self.pass_txt.SetValue(self.text_no_password.GetValue())
            self.pass_txt.SetFocus()
        self.pass_txt.GetParent().Layout()
        self.password_shown = not self.password_shown

编辑

按照这个链接GDB抱怨缺失的原因c上的说明(正如@AliIrani所建议的那样),我的消息被更改了:

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.
raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50
50    return ret;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-21 06:42:51

看起来这个问题是由库darkdetect引起的。此错误仅在运行时发生,因为

代码语言:javascript
复制
    pub.sendMessage("loginListener", message="logged in")
    self.Destroy()

创建了一个新窗口,背景颜色取决于用户选择的系统主题(也许我的代码没有被授权访问这些信息)。

票数 0
EN

Stack Overflow用户

发布于 2021-06-19 21:23:18

有人能解释一下这意味着什么以及如何解决吗?

这意味着python可执行文件遇到了某种致命错误,并调用了abort()。通常,这种情况发生在assert离子违规时,并伴随着stderr上的错误消息。

不幸的是,您的安装程序应用程序被完全剥离(这使得GDB无法告诉您崩溃发生在何处),或者是打包了UPX

根据 PyInstaller doc,您将希望使用--noupx标志(如果正在使用它们,则删除-s--strip )。

如果应用程序仍然崩溃,那么应该更容易判断该崩溃发生在何处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68014949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档