繁体   English   中英

wxWidgets在关闭应用程序时崩溃

[英]wxWidgets Crash on closing application

这可能是一个愚蠢的问题,因为此崩溃可能与某些无效的指针或已损坏的对象有关,但是以各种方式查看代码,我无法找出问题出在哪里。

当我关闭软件时,收到SIGSEVerror并显示以下消息:

#0 00000000 0x003f01c5 in ??() (??:??)
#1 004D36BC wxSocketClient::~wxSocketClient(this=0x2a8bf80, __in_chrg=<value optimized out>) (../../src/common/socket.cpp:1237)
#2 0042E9EE aaa::~aaa(this=0x2a5998c, __in_chrg=<value optimized out>) (C:\Documents and Settings\\My Documents\programming\assistant\Assistant\src\pasan.cpp:71)
#3 00416A49 AssistantFrame::~AssistantFrame(this=0x2a592c8, __in_chrg=<value optimized out>) (C:\Documents and Settings\\My Documents\programming\assistant\Assistant\AssistantMain.cpp:937)
#4 00416FCB AssistantFrame::~AssistantFrame(this=0x2a592c8, __in_chrg=<value optimized out>) (C:\Documents and Settings\\My Documents\programming\assistant\Assistant\AssistantMain.cpp:1007)
#5 00438F21 wxAppBase::DeletePendingObjects(this=0x2a59a58) (../../src/common/appcmn.cpp:423)
#6 00439067 wxAppBase::ProcessIdle(this=0x2a59a58) (../../src/common/appcmn.cpp:454)
#7 004DD68B wxEventLoopManual::Run(this=0x2ac4fb0) (../../src/common/evtloopcmn.cpp:99)
#8 00438C62 wxAppBase::MainLoop(this=0x2a59a58) (../../src/common/appcmn.cpp:312)
#9 00438D95 wxAppBase::OnRun(this=0x2a59a58) (../../src/common/appcmn.cpp:367)
#10 004E8372    wxEntryReal(argc=@0x22fe5c, argv=0x3f2880) (../../src/common/init.cpp:448)
#11 004330C0    wxEntry(argc=@0x22fe5c, argv=0x3f2880) (../../src/msw/main.cpp:231)
#12 004332AF    wxEntry(hInstance=0x400000, nCmdShow=10) (../../src/msw/main.cpp:386)
#13 00401441    WinMain(hInstance=0x400000, hPrevInstance=0x0, lpCmdLine=0x251f49 "", nCmdShow=10) (C:\Documents and Settings\\My Documents\programming\assistant\Assistant\AssistantApp.cpp:17)
#14 00000000    0x005f9566 in main() (??:??)

问题是我的代码已经大约有5k行,并使用了许多控件。 我不是调试专家吗,从中获得一些帮助信息吗?

谢谢你的帮助

一般来说:

  • 进行调试构建

  • 运行应用程序

  • 您可能会弹出带有有关躲避性代码的其他信息的额外窗口。 如果是这样,请找出调试版本注意到的问题并进行修复

  • 这样可以解决问题吗?

  • 如果不是,请在调试器下运行该应用程序。 发生崩溃时,请查看调用堆栈。 从底部开始逐步进行操作,直到输入识别出的代码。 这将告诉您崩溃发生时正在执行什么代码。 它可能在您的某个类的析构函数中,这将为您提供需要解决的重要线索。

在这种情况下:

崩溃似乎发生在wxSocketClient的析构函数中,该析构函数是从../../src/common/socket.cpp:1237调用的吗? 您是否在这里双重删除wxSocketClient实例?

我认为在不研究源代码的情况下很难在这里给出答案。 您可以通过暂时禁用/注释/不实例化某些类/窗口来降低代码的复杂性吗? 从仅调用一个简单的wxFrame的wxApp开始,并检查它是否正常工作,然后如何逐步重新启用您的类呢?

你做

找到调试起点的解决方案是实际查看该转储。 第三行指出

#2 0042E9EE aaa::~aaa(this=0x2a5998c, __in_chrg=<value optimized out>) \
 (C:\Documents and Settings\My Documents\programming\assistant\Assistant\src\pasan.cpp:71)

现在,从调试开始,请查看“ My Documents\\programming\\assistant\\Assistant\\src\\pasan.cpp ,第71行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM