我最近将我的xcode升级到版本4,并且我的EXC_BAD_ACCESS exception代码中有一个,但是尽管NSZombieEnabled在环境中设置它仍然显示在thread1,int retVal = UIApplicationMain(argc, argv, nil, nil);line 上的断点.
我确定我在XCode 3中配置了这个,以阻止导致异常的代码行.现在它没有这样做,也没有在GDB窗口中显示错误消息.
有谁知道我可能会缺少什么?
谢谢雷
当应用程序从此EXC_BAD_ACCESS行(asm)上的调试器()加载时,我遇到了崩溃:
__dyld__ZN16ImageLoaderMachO12bindLocationERKN11ImageLoader11LinkContextEmmPKS0_hPKclS7_+320>
Run Code Online (Sandbox Code Playgroud)
我知道它有图像加载器的东西,但我无法弄清楚是什么.
任何的想法?
谢谢.
我在[alert show]行上获得了EXC_BAD_ACCESS.
为什么我得到这个?
alert = [[UIAlertView alloc]initWithTitle:@"Application Alert" message:@"all date popup" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Update",nil];
[alert show]; //EXC_BAD_ACCESS on this line
Run Code Online (Sandbox Code Playgroud) 使用64位iOS模拟器时,下面的init函数崩溃,出现EXC_BAD_ACCESS(code = 1)错误.谁会知道为什么?以及如何正确地解决它.
有关信息:'format'不是零,它可以在32位模拟器和任何32/64位iPhone/iPad设备上正常工作.
void Log (NSString * format, ...)
{
va_list argList;
va_start(argList, format);
NSLogv(format, argList);
NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
va_end(argList);
...
}
Run Code Online (Sandbox Code Playgroud)
在AppDelegate中称为第一件事
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Log(@"app options %@", launchOptions);
...
}
Run Code Online (Sandbox Code Playgroud) 我正在关注本教程,作为我正在Swift工作的RSS馈送器应用程序的快速入门.我知道自从本教程以来Swift中有一些变化,但它们似乎都没有解释为什么我遇到这个问题.
相关代码(据我所知)在我的TableViewController中如下:
override func viewDidLoad() {
super.viewDidLoad()
let url:NSURL = NSURL(string: "my.url.string")
parser = NSXMLParser(contentsOfURL: url)
parser.delegate = self
parser.parse() // <- Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
}
Run Code Online (Sandbox Code Playgroud)
实际的解析器委托方法似乎没有问题,因为我在它们上放置了断点,甚至在崩溃之前都没有调用它们.
我的假设是它是一个Swift错误,但我想在我向苹果抱怨之前确保我没有遗漏一些东西.
我使用字典来计算表达式,当表达式变量和字典实际上是由NSExpression使用,有事和我在尝试更新字典时EXC_BAD_ACCESS,在iPhone6调试时,而不是在这只是发生模拟器而不是iPhone 4S.
let strExpression = "a+b+20"
let exp = NSExpression(format:strExpression)
self.dictionary = ["a":10.0, "b":15.0, "c":25.0]
let value:AnyObject = exp.expressionValueWithObject(self.dictionary, context: nil)
let doubleValue = value as Double
self.dictionary.updateValue(doubleValue, forKey: "c")
Run Code Online (Sandbox Code Playgroud)
真的很奇怪的是,如果我在创建字典后添加这一行,那么它很好:
let newDic = self.dictionary
Run Code Online (Sandbox Code Playgroud)
我,我使用的是iOS 8.1.提前致谢!
我通过Crashlytics在我的应用程序中收到此错误.我无法找到崩溃发生的地点和方式.以下是Crashlytics的日志:
Thread : Crashed: com.apple.main-thread
0 CoreLocation 0x0000000183f62304 (null) + 60044
1 CoreLocation 0x0000000183f230f0 (null) + 1436
2 CoreLocation 0x0000000183f230f0 (null) + 1436
3 CoreLocation 0x0000000183f2261c (null) + 1980
4 CoreFoundation 0x0000000183754c9c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
5 CoreFoundation 0x0000000183754940 __CFRunLoopDoTimer + 884
6 CoreFoundation 0x0000000183752054 __CFRunLoopRun + 1520
7 CoreFoundation 0x0000000183680dc0 CFRunLoopRunSpecific + 384
Run Code Online (Sandbox Code Playgroud)
并且还说明了:崩溃:com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x6136383561626000
有人能指出我正确的方向吗?谢谢
我理解错误的EXC_BAD_ACCESS含义一般,但我对我的情况发生了什么感到困惑.
我有一个具有NSComparator属性的自定义类sortWithThisComparator.如果该属性由用户设置,当我将项插入实例的类属性数组时,items我使用比较器来确定插入位置:
- (void) insertItem:(id<NSCoding, CKArchivingItem>) item {
if (arrayObjectClassString && ![item isKindOfClass:NSClassFromString(arrayObjectClassString)]) {
[NSException raise:@"YOU MADE A MISTAKE" format:@"you tried to insert a %@ but I can only accept %@", [item class], arrayObjectClassString];
} else {
if (!sortWithThisComparator) {
[self.items addObject:item];
} else {
NSInteger newItemIndex = [self.items indexOfObject:item inSortedRange:NSMakeRange(0, [self.items count]) options:NSBinarySearchingFirstEqual usingComparator:sortWithThisComparator];
if (newItemIndex >= [self.items count]) {
[self.items addObject:items];
} else {
[self.items insertObject:item atIndex:newItemIndex];
}
}
} …Run Code Online (Sandbox Code Playgroud) 我在线上获得了exc_bad_access CIContext *context = [CIContext contextWithOptions:nil];
我已经启用了僵尸并用乐器检查:没有运气.
完整的代码是:
- (UIImage *) doBinarize:(UIImage *)sourceImage withThreshold:(float)threshold {
UIImage *newImage;
if (sourceImage){
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *image = [[CIImage alloc] initWithImage:sourceImage];
CIImage *cImg = [self AdaptiveThresholdFilter:image withThreshold:threshold];
CIImage *ciImage = cImg;
CGImageRef cgImage = [context createCGImage:ciImage fromRect:CGRectMake(0, 0, sourceImage.size.width, sourceImage.size.height)];
newImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
} else {
return nil;
}
return newImage;
}
Run Code Online (Sandbox Code Playgroud)
但是我发现几乎在我放置CIContext contextWithOptions行的任何地方,应用程序都会崩溃.
这是在iOS8.1,iPhone 5C上.应该注意的是iOS9或iOS10没有问题.
有什么建议?
最近,我在我的一个 iOS/Swift 项目中遇到了非常奇怪的内存问题。我真的不确定发生了什么,感觉也不太容易描述,但无论如何我会尽力而为。
它的基本行为如下:
目前该应用程序崩溃并出现以下错误(3 次不同运行的结果):
线程 1:EXC_BAD_ACCESS(代码=2,地址=0x16d09aa00)
线程 1:EXC_BAD_ACCESS(代码=2,地址=0x16af46a00)
线程 1:EXC_BAD_ACCESS(代码=2,地址=0x16d526a00)
我在WWDC 2018 上发现了一个有趣的会议(Understanding Crashes and Crash Logs),其中一个人指出有时可以从特定的内存地址中获取更多信息,崩溃就会发生。
不幸的是,它在我的应用程序中崩溃的地址有些完全不同,但也许我们可以从它们那里获得线索?至少有趣的是,它们都非常相似,不是吗?
进一步调查表明,前 2 个字节 (16) 始终保持不变,然后是 4 个随机字节,然后是 3 个字节 (a00)。当激活诊断(例如 ASan 或 Scribble)时,最后 3 个字节会改变(例如 3a0 或 9e0)。但也许这只是由于添加了更多“调试内容”而导致的一种转变?我真的不是那个“记忆人”,只是想提供我注意到的任何东西。
我尝试了不同的诊断选项(来自方案),但没有一个真正以任何方式改变崩溃,或提供更多信息。
崩溃不引用 0xAA 或 0x55,所以使用 Scribble 没有什么可以捕获的吗?(Xcode - 涂鸦,保护边缘和保护 malloc)
使用这个也没有注意到任何区别。
使用本指南。
malloc_info --type 0x16b15e9c0
错误:错误:试图将堆栈放入无法读取的内存中:0x16b15e920。
使用 ASan …
exc-bad-access ×10
ios ×7
swift ×3
xcode ×3
iphone ×2
objective-c ×2
64-bit ×1
core-image ×1
crash ×1
dictionary ×1
ios8 ×1
nsarray ×1
nsstring ×1
nsxmlparser ×1
reswift ×1
sorting ×1
uialertview ×1
xcode6 ×1