gpt4 book ai didi

objective-c - 运行数小时后,垃圾收集导致 EXC_BAD_ACCESS 崩溃

转载 作者:行者123 更新时间:2023-12-03 17:16:26 25 4
gpt4 key购买 nike

我有一个应用程序,其中随机显示几个视频,一切都很甜蜜并且效果很好。由于他们的程序一遍又一遍地循环相同的代码,我发现突然停止很奇怪。下面的错误消息可能是关于什么的?

但是几个小时后它崩溃了。第一次运行了 13 小时后崩溃,今晚运行了 11 小时后崩溃了。

Process:         CamRecorder [4695]
Path: /Users/wgv/Desktop/Fullscreeen/CamRecorder.app/Contents/MacOS/CamRecorder
Identifier: wgv.CamRecorder
Version: 1.0 (1)
Code Type: X86 (Native)
Parent Process: launchd [86]

Date/Time: 2011-03-01 02:21:03.509 +0100
OS Version: Mac OS X 10.6.6 (10J567)
Report Version: 6

Interval Since Last Report: 428620 sec
Crashes Since Last Report: 2
Per-App Interval Since Last Report: 257957 sec
Per-App Crashes Since Last Report: 2
Anonymous UUID: 4528D13C-54C9-413F-92D9-128D05272F57


Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000fef6e1df
Crashed Thread: 0 Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: rectSetBeingDrawnForView:
objc[4695]: garbage collection is ON

Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x93719ed7 objc_msgSend + 23
1 com.apple.AppKit 0x915ae95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
2 com.apple.AppKit 0x915ae95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
3 com.apple.AppKit 0x9164caa3 -[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 311
4 com.apple.AppKit 0x915a9ea2 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309
5 com.apple.AppKit 0x9150aa57 -[NSView displayIfNeeded] + 818
6 com.apple.AppKit 0x914be661 -[NSNextStepFrame displayIfNeeded] + 98
7 com.apple.AppKit 0x914d3d40 -[NSWindow displayIfNeeded] + 204
8 com.apple.AppKit 0x9150528a _handleWindowNeedsDisplay + 696
9 com.apple.CoreFoundation 0x91397e02 __CFRunLoopDoObservers + 1186
10 com.apple.CoreFoundation 0x91353d8d __CFRunLoopRun + 557
11 com.apple.CoreFoundation 0x91353464 CFRunLoopRunSpecific + 452
12 com.apple.CoreFoundation 0x91353291 CFRunLoopRunInMode + 97
13 com.apple.HIToolbox 0x9904e004 RunCurrentEventLoopInMode + 392
14 com.apple.HIToolbox 0x9904ddbb ReceiveNextEventCommon + 354
15 com.apple.HIToolbox 0x9904dc40 BlockUntilNextEventMatchingListInMode + 81
16 com.apple.AppKit 0x914db78d _DPSNextEvent + 847
17 com.apple.AppKit 0x914dafce -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
18 com.apple.AppKit 0x9149d247 -[NSApplication run] + 821
19 com.apple.AppKit 0x914952d9 NSApplicationMain + 574
20 wgv.CamRecorder 0x00001ff9 start + 53

乐码

-(void)playMovie
{


NSError *error = nil;
NSString *pathString = [NSString stringWithFormat:@"/Users/Shared/Real/Movies"];

fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathString error: &error];

NSInteger lenghtOfArray = [fileList count];

NSInteger myNewFavoriteRandomNumber = arc4random() % lenghtOfArray;

NSString *fileName = [NSString stringWithFormat:@"%@",[fileList objectAtIndex:myNewFavoriteRandomNumber]];
fileName = [fileName stringByDeletingPathExtension];

NSString *fuckDS_Store = [NSString stringWithFormat:@"%@",[fileList objectAtIndex:myNewFavoriteRandomNumber]];
if([fuckDS_Store isEqualToString:@".DS_Store"])
{
[self playMovie];
}
else
{
if([lastPlayedVideo intValue] == myNewFavoriteRandomNumber)
{
if(lenghtOfArray > 3)
{
[self playMovie];

}
}
else if([lastPlayedVideo2 intValue] == myNewFavoriteRandomNumber)
{
if(lenghtOfArray > 3)
{
[self playMovie];
}
}
else
{
lastPlayedVideo2 = lastPlayedVideo;
lastPlayedVideo = [NSNumber numberWithInt:myNewFavoriteRandomNumber];

[textfield setStringValue:[fileList objectAtIndex:myNewFavoriteRandomNumber]];

NSError *cperror = nil;


NSString* stringMoviePath = [NSString stringWithFormat:@"/Users/Shared/Real/Movies/%@.mov",fileName];

QTMovie* movie = [[QTMovie alloc] initWithFile:stringMoviePath error:&cperror];


if(movie)
{
[movieViewLoop setMovie:movie];
[movieViewLoop play:@"yes"];
}
else
{
//[self playMovie];
[self performSelector:@selector(playMovie) withObject:@"Oki" afterDelay:1];
}
}

}
}
- (void)movieDidEnd:(NSNotification *)aNotification //Every time a movie has been played this is being run
{
if([blockLoop intValue] == 0)
{
[self playMovie];
}
}

最佳答案

崩溃的代码深深嵌套在 AppKit 中。窗口正忙于重绘其 View 层次结构的一部分。在此过程中,它使用(私有(private))_NSDisplayOperation 对象,该对象响应提到的 rectSetBeingDrawnForView: 选择器。

堆栈跟踪看起来像是 AppKit 试图向错误收集的显示操作对象发送消息。崩溃可能与您的代码完全无关。

那么,你能做些什么呢?

  1. File a bug
  2. 避免垃圾收集

关于objective-c - 运行数小时后,垃圾收集导致 EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com