Как я могу исследовать источник нарушения прав доступа, возникающего при запуске приложения? - PullRequest
2 голосов
/ 01 ноября 2010

Я новичок в программировании на 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() (??:??)

И регистры процессора заканчиваются на

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

Я действительно не знаю, гденачать искать проблему.Кто-нибудь может мне помочь или указать мне правильное направление?

Примечание: я использую Code :: Blocks

Ответы [ 5 ]

1 голос
/ 01 ноября 2010

Как вы говорите, это приложение для Windows.Затем, любые проблемы с запуском, я нашел ADPlus очень полезным.

РЕДАКТИРОВАТЬ 2:

Вы также можете проверить Пользовательский режим Process Dumper еслиADPlus не применяется

0 голосов
/ 01 ноября 2010

Скомпилировали ли вы с включенным режимом отладки (-g)?

Также серьезно подумайте над исправлением предупреждений.В большинстве случаев это реальные проблемы в коде, которые должны быть решены.

Вы также должны попытаться выяснить, происходит ли это с почти пустой основной (закомментируйте большую часть / весь ваш код в main).

0 голосов
/ 01 ноября 2010

Похоже, что одна из ваших зависимостей DLL не может быть загружена или инстанцирована правильно.

0 голосов
/ 01 ноября 2010

Попробуйте следующие бесплатные инструменты MS - оба отлично подходят для устранения подобных проблем.

0 голосов
/ 01 ноября 2010

Смотрите, если у вас есть глобальные экземпляры класса с конструктором - если в конструкторе возникает ошибка и класс объявляется глобально (кстати, это плохо), вы получите sigsegv еще до main (). Если у вас есть такие классы - попробуйте провести рефакторинг вашего кода, чтобы они содержались внутри main (или другой функции), - вам будет легче отлаживать.

...