Mac:我得到SIGABRT,但是调用堆栈是无用的

Mac: I get SIGABRT but the call stack is useless

本文关键字:调用 堆栈 无用 SIGABRT Mac      更新时间:2023-10-16

我正在用c++编写Mac游戏,并且我得到一个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是什么?
为什么我得到这个调用堆栈?
我有什么办法得到一个很好的调用堆栈吗?

谢谢!

调试器在错误的线程中停止。在GDB中尝试t a a bt查看所有线程的回溯。

mach_msg_trap是线程在等待消息进入时停留的地方。所以,你正在看一个没有运行的线程。Mach是OS x上消息传递接口的名称。