如何调查启动应用程序时发生的访问冲突的来源?

时间:2010-11-01 13:21:59

标签: c++ codeblocks access-violation

我是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 ?? () ()

这是来自Call Stack

#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

5 个答案:

答案 0 :(得分:1)

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

编辑2:

如果ADPlus不适用,您也可以查看User Mode Process Dumper

答案 1 :(得分:0)

看看,如果你有一些带有构造函数的类的全局实例 - 如果在构造函数中引发错误并且类被全局声明(坏事要做btw) - 你甚至可以在main()之前得到sigsegv。 如果您有这样的类 - 尝试重构代码以将它们放在main(或其他函数)中 - 它将更容易调试。

答案 2 :(得分:0)

答案 3 :(得分:0)

听起来像我的一个DLL依赖项无法正确加载或实例化。

答案 4 :(得分:0)

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

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

您还应该尝试查看是否会出现几乎空的主要内容(在main中注释掉您的大部分/全部代码)。