2

我是 C++ 编程的新手。我正在编译一个 Windows 应用程序,该应用程序编译正常,只有几个警告,但是当我启动它时,它甚至似乎没有启动,并在运行 3 秒后返回访问冲突。当我尝试调试时,它甚至似乎都没有进入代码,所以我不知道从哪里开始寻找问题。

这是我能够从调试器中检索到的信息:

Building to ensure sources are up-to-date
Build succeeded
Selecting target: 
Debug
Adding source dir: C:\Documents and Settings\Christian Ekiza\Mis documentos\My Dropbox\Private Files\coding\juego_pruebas_01\juego_pruebas_01\
Adding source dir: C:\Documents and Settings\Christian Ekiza\Mis documentos\My Dropbox\Private Files\coding\juego_pruebas_01\juego_pruebas_01\
Adding file: bin\Debug\juego_pruebas_01.exe
Starting debugger: 
done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb 6.8
Child process PID: 3328
Program received signal SIGSEGV, Segmentation fault.
In ?? () ()

这是来自调用堆栈

#0 00000000 0x000154e4 in ??() (??:??)
#1 00409198 __cmshared_create_or_grab() (../../../../gcc-4.4.1/libgcc/../gcc/config/i386/cygming-shared-data.c:140)
#2 00000000 0x0040131b in __gcc_register_frame() (??:??)
#3 00000000 0x0040a09b in register_frame_ctor() (??:??)
#4 00000000 0x00408f42 in __do_global_ctors() (??:??)
#5 00000000 0x00401095 in __mingw_CRTStartup() (??:??)
#6 00000000 0x00401148 in mainCRTStartup() (??:??)

CPU寄存器以

'gs' register with a hex value '0x0'

我真的不知道从哪里开始寻找问题。任何人都可以帮助我或指出正确的方向吗?

注意:我正在使用 Code::Blocks

4

5 回答 5

1

正如你所说,它是一个 Windows 应用程序。然后,任何与启动有关的问题,我发现ADPlus非常有用。

编辑2:

如果 ADPlus 不适用,您也可以检查用户模式进程转储程序

于 2010-11-01T13:30:09.213 回答
0

在我看来,您的 DLL 依赖项之一无法正确加载或实例化。

于 2010-11-01T14:02:46.073 回答
0

尝试以下免费的 MS 工具 - 两者都非常适合调试此类问题。

于 2010-11-01T13:59:30.957 回答
0

看,如果你有一些带有构造函数的类的全局实例——如果在构造函数中引发错误并且类被全局声明(顺便说一句,这样做不好)——你甚至会在 main() 之前得到 sigsegv。如果你有这样的类 - 尝试重构你的代码以将它们放在 main (或其他函数)中 - 调试起来会更容易。

于 2010-11-01T13:27:40.440 回答
0

您是否在-g启用调试模式 ( ) 的情况下进行编译?

还要认真考虑实际修复警告。大多数时候,它们是代码中应该解决的实际问题。

您还应该尝试查看几乎空的 main 是否会发生这种情况(注释掉您在 中的大部分/所有代码main)。

于 2010-11-01T14:50:04.243 回答