我有一个多线程OS应用程序,它使用C++、Objective和Swift的混合。
当我的应用程序关闭时,我在Xcode调试器窗口中看到如下内容:
libc++abi.dylib: Pure virtual function called!
我知道这个错误通常是由调用C++类构造函数或析构函数中的虚拟函数引起的。
有什么简单的方法可以找到它的位置吗?所谓“轻松”,我的意思是“不分析每个构造函数的每一行调用树和每个具有虚拟函数的类的析构函数”。
我没看到堆栈痕迹。当打印此消息时,调试器不会停止程序。从我的应用程序委托的applicationDidTerminate方法中记录的一条消息在此消息之前。
什么指令导致Xcode中的硬破坏?例如,在Visual下,我可以执行'_asm int 3‘或'DebugBreak()’。在某些GCC实现下,它是asm(“断开0")或asm(”陷阱“)。
我在Xcode下尝试过各种组合,没有任何运气。(内联汇编程序工作正常,因此不存在语法问题)。
作为参考,这是一个断言宏。我不想使用assert.h中的定义,这既是为了便于移植,也是因为它们似乎在XCode提供的版本中执行了abort()。
约翰-超级,干杯。作为参考,int 3语法是Intel和iPhone所需的语法。
Chris --谢谢您的评论,但是有很多理由可以避免将代码
我正在阅读关于C++模板的文章,并希望对比计算从0到N的函数的两个不同的实现。
不幸的是,我有一些问题,我想通过例子来回答几个问题:
朴素和的代码:
#include <stdio.h>
template<int N>
struct Sum {
// Copied the implementation idea from Scott Meyers book
// "Effective C++". Is there a better way?
enum { value = N + Sum<N - 1>::value }