SIGABRT 在 macCatalyst 中随机“以下金属对象正在被销毁,同时命令缓冲区仍要求其处于活动状态”

问题描述 投票:0回答:1

我的 macCatalyst 应用程序最近发生了一些随机崩溃。到处寻找但没有找到任何好的线索。我的猜测是,这与内存或屏幕上可见的视图太多有关。我没有得到很好的堆栈跟踪,但这就是日志中显示的内容:

-[MTLDebugDevice notifyExternalReferencesNonZeroOnDealloc:]:2951: failed assertion `The following Metal object is being destroyed while still required to be alive by the command buffer 0x7f8cd811c600 (label: <no label set>):
<MTLToolsObject: 0x7f8b0f9e3d60> -> <MTLIGAccelTexture: 0x7f8cd8566a00>
    label = CAMetalLayer Drawable 
    textureType = MTLTextureType2D 
    pixelFormat = MTLPixelFormatBGRA8Unorm_sRGB 
width = 772 
height = 1372 
depth = 1 
arrayLength = 1 
mipmapLevelCount = 1 
sampleCount = 1 
cpuCacheMode = MTLCPUCacheModeDefaultCache 
storageMode = MTLStorageModeManaged 
hazardTrackingMode = MTLHazardTrackingModeTracked 
resourceOptions = MTLResourceCPUCacheModeDefaultCache MTLResourceStorageModeManaged MTLResourceHazardTrackingModeTracked  
usage = MTLTextureUsageShaderRead MTLTextureUsageShaderWrite MTLTextureUsageRenderTarget MTLTextureUsagePixelFormatView 
shareable = 0 
framebufferOnly = 0 
purgeableState = MTLPurgeableStateNonVolatile 
swizzle = [MTLTextureSwizzleRed, MTLTextureSwizzleGreen, MTLTextureSwizzleBlue, MTLTextureSwizzleAlpha] 
isCompressed = 0 
parentTexture = <null> 
parentRelativeLevel = 0 
parentRelativeSlice = 0 
buffer = <null> 
bufferOffset = 0 
bufferBytesPerRow = 0 
iosurface = 0x600002533060 
iosurfacePlane = 0 
allowGPUOptimizedContents = YES'
-[MTLDebugDevice notifyExternalReferencesNonZeroOnDealloc:]:2951: failed assertion `The following Metal object is being destroyed while still required to be alive by the command buffer 0x7f8cd811c600 (label: <no label set>):
<MTLToolsObject: 0x7f8b0f9e3d60> -> <MTLIGAccelTexture: 0x7f8cd8566a00>
    label = CAMetalLayer Drawable 
textureType = MTLTextureType2D 
pixelFormat = MTLPixelFormatBGRA8Unorm_sRGB 
width = 772 
height = 1372 
depth = 1 
arrayLength = 1 
mipmapLevelCount = 1 
sampleCount = 1 
cpuCacheMode = MTLCPUCacheModeDefaultCache 
storageMode = MTLStorageModeManaged 
hazardTrackingMode = MTLHazardTrackingModeTracked 
resourceOptions = MTLResourceCPUCacheModeDefaultCache MTLResourceStorageModeManaged MTLResourceHazardTrackingModeTracked  
usage = MTLTextureUsageShaderRead MTLTextureUsageShaderWrite MTLTextureUsageRenderTarget MTLTextureUsagePixelFormatView 
shareable = 0 
framebufferOnly = 0 
purgeableState = MTLPurgeableStateNonVolatile 
swizzle = [MTLTextureSwizzleRed, MTLTextureSwizzleGreen, MTLTextureSwizzleBlue, MTLTextureSwizzleAlpha] 
isCompressed = 0 
parentTexture = <null> 
parentRelativeLevel = 0 
parentRelativeSlice = 0 
buffer = <null> 
bufferOffset = 0 
bufferBytesPerRow = 0 
iosurface = 0x600002533060 
iosurfacePlane = 0 
allowGPUOptimizedContents = YES'

我正在配备 32Gb 内存的 Intel Mac mini 上运行。在屏幕上显示 MapView 时,它经常崩溃。但在其他一些情况下也是如此。

编辑:可能与在 MacCatalyst 上的 MapView 中以编程方式放大动画有关。目前的解决方法是禁用动画。会进一步研究。

swift macos sigabrt mac-catalyst
1个回答
0
投票

此开发者论坛帖子建议禁用 Metal API 验证。我遇到了同样的问题,这似乎解决了它。

在 Xcode 中,在“产品”菜单中,转到“方案”,然后“编辑方案...”。在左侧面板中选择“运行(调试)”,然后在“诊断”选项卡中取消选中 Metal 设置下的“API 验证”

© www.soinside.com 2019 - 2024. All rights reserved.