这可能是一个愚蠢的问题,因为这个崩溃可能与一些无效指针或已经被破坏的对象有关,但是在所有方面查看代码我都找不到问题所在。
当我关闭软件时,我收到了一条带有以下消息的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行并且使用了很多控件。 由于我不是调试员专家,所以有一些帮助信息吗?
感谢您的帮助
答案 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行。