Mac: я получаю SIGABRT, но стек вызовов бесполезен - PullRequest
1 голос
/ 08 апреля 2011

Я кодирую игру для Mac на c ++, получаю SIGABRT, и консоль печатает следующее:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_lexical_cast> >'
  what():  bad lexical cast: source type value could not be interpreted as target
Program received signal:  “SIGABRT”.

Итак, я делаю плохой lexical_cast.Но проблема в том, что я не могу знать, где, потому что стек вызовов выглядит следующим образом:

#0  0x7fff85fb629a in mach_msg_trap
#1  0x7fff85fb690d in mach_msg
#2  0x7fff81f58932 in __CFRunLoopRun
#3  0x7fff81f57dbf in CFRunLoopRunSpecific
#4  0x7fff88dba7ee in RunCurrentEventLoopInMode
#5  0x7fff88dba5f3 in ReceiveNextEventCommon
#6  0x7fff88dba4ac in BlockUntilNextEventMatchingListInMode
#7  0x7fff84f85e64 in _DPSNextEvent
#8  0x7fff84f857a9 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
#9  0x7fff84f4b48b in -[NSApplication run]
#10 0x7fff84f441a8 in NSApplicationMain
#11 0x1000ef759 in os_gameMainLoop at main-osx.mm:22
#12 0x10009a97d in main at words.cpp:18

Это не правильный стек.

Что такое match_msg_trap?
Почему я получаю этот стек вызовов?
Есть ли у меня какой-нибудь способ получить хороший стек вызовов при сбое?

Спасибо!

1 Ответ

2 голосов
/ 08 апреля 2011

Отладчик остановлен не в том потоке. Попробуйте t a a bt в GDB, чтобы увидеть следы для всех потоков.

mach_msg_trap - это место, где потоки паркуются, ожидая поступления сообщения. Итак, вы смотрите на поток, который не запущен. Mach - это имя интерфейса передачи сообщений в OS X.

...