wxWidgets在关闭应用程序时崩溃

时间:2011-09-02 08:33:05

标签: c++ crash wxwidgets

这可能是一个愚蠢的问题,因为这个崩溃可能与一些无效指针或已经被破坏的对象有关,但是在所有方面查看代码我都找不到问题所在。

当我关闭软件时,我收到了一条带有以下消息的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行并且使用了很多控件。 由于我不是调试员专家,所以有一些帮助信息吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

一般来说:

  • 执行调试构建

  • 运行应用程序

  • 您可能会获得额外的窗口,其中包含有关狡猾代码的额外信息。如果是这样,请跟踪调试版本已注意到的问题并修复它们

  • 这样可以解决问题吗?

  • 如果没有,请在调试器下运行应用程序。发生崩溃时,请查看调用堆栈。从底部向上工作,直到输入您识别的代码。这将告诉您崩溃发生时正在执行的代码。它可能在你的一个类的析构函数中,这将为你提供一个有关需要修复的强大线索。

在这种特殊情况下:

似乎崩溃发生在wxSocketClient的析构函数中,从../../src/common/socket.cpp:1237调用你看过这个吗?你在这里做了一个wxSocketClient实例的双重删除吗?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

找到调试开始点的解决方案是实际查看该转储。第三行陈述

#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行。