加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – XCode崩溃报告(已经符号化)缺少行号

发布时间:2020-12-14 19:05:43 所属栏目:百科 来源:网络整理
导读:我有一个崩溃报告(它已经象征着至少我希望如此,因为我从XCode Organizer获取此日志) Incident Identifier: F4324555-0916-4E32-82EF-3272917367BBBeta Identifier: 80811904-A512-48A1-9593-D386703A62F0Hardware Model: iPhone7,2Process: SelfieSuperStarz
我有一个崩溃报告(它已经象征着至少我希望如此,因为我从XCode Organizer获取此日志)

Incident Identifier: F4324555-0916-4E32-82EF-3272917367BB
Beta Identifier:     80811904-A512-48A1-9593-D386703A62F0
Hardware Model:      iPhone7,2
Process:             SelfieSuperStarz [596]
Path:                /private/var/containers/Bundle/Application/BFA0D82B-274B-400B-8F84-52A1D7369C51/SelfieSuperStarz.app/SelfieSuperStarz
Identifier:          com.PuckerUp.PuckerUp
Version:             21 (1.31)
Beta:                YES
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.PuckerUp.PuckerUp [434]


Date/Time:           2017-07-29 20:06:11.7394 -0400
Launch Time:         2017-07-29 19:34:39.7433 -0400
OS Version:          iPhone OS 10.3.2 (14F89)
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000,0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x18bebafe0 __exceptionPreprocess + 124 (NSException.m:165)
1   libobjc.A.dylib                 0x18a91c538 objc_exception_throw + 56 (objc-exception.mm:521)
2   CoreFoundation                  0x18be26eb4 -[__NSArray0 objectAtIndex:] + 108 (CFArray.c:69)
3   SelfieSuperStarz                0x10007b708 specialized _ArrayBuffer._getElementSlowPath(Int) -> AnyObject + 116
4   SelfieSuperStarz                0x10007ea40 specialized Merger.merge(completion : () -> (),assets : [Asset]) -> () + 1444 (Merger.swift:0)
5   SelfieSuperStarz                0x100071f3c specialized AssetView.finish(UIButton) -> () + 520 (Merger.swift:0)
6   SelfieSuperStarz                0x1000712d0 @objc AssetView.finish(UIButton) -> () + 40 (AssetView.swift:0)
7   UIKit                           0x192021010 -[UIApplication sendAction:to:from:forEvent:] + 96 (UIApplication.m:4580)
8   UIKit                           0x192020f90 -[UIControl sendAction:to:forEvent:] + 80 (UIControl.m:609)
9   UIKit                           0x19200b504 -[UIControl _sendActionsForEvents:withEvent:] + 440 (UIControl.m:694)
10  UIKit                           0x192020874 -[UIControl touchesEnded:withEvent:] + 576 (UIControl.m:446)
11  UIKit                           0x192020390 -[UIWindow _sendTouchesForEvent:] + 2480 (UIWindow.m:2122)
12  UIKit                           0x19201b728 -[UIWindow sendEvent:] + 3192 (UIWindow.m:2292)
13  UIKit                           0x191fec33c -[UIApplication sendEvent:] + 340 (UIApplication.m:10778)
14  UIKit                           0x1927e6014 __dispatchPreprocessedEventFromEventQueue + 2400 (UIEventDispatcher.m:1448)
15  UIKit                           0x1927e0770 __handleEventQueue + 4268 (UIEventDispatcher.m:1671)
16  UIKit                           0x1927e0b9c __handleHIDEventFetcherDrain + 148 (UIEventDispatcher.m:1706)
17  CoreFoundation                  0x18be6942c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 (CFRunLoop.c:1943)
18  CoreFoundation                  0x18be68d9c __CFRunLoopDoSources0 + 540 (CFRunLoop.c:1989)
19  CoreFoundation                  0x18be669a8 __CFRunLoopRun + 744 (CFRunLoop.c:2821)
20  CoreFoundation                  0x18bd96da4 CFRunLoopRunSpecific + 424 (CFRunLoop.c:3113)
21  GraphicsServices                0x18d800074 GSEventRunModal + 100 (GSEvent.c:2245)
22  UIKit                           0x192051058 UIApplicationMain + 208 (UIApplication.m:4089)
23  SelfieSuperStarz                0x10002e990 main + 56 (AppDelegate.swift:16)
24  libdyld.dylib                   0x18ada559c start + 4

正如你所看到的那样,它在第0行的Class Merger中说.这是不可能的,你可以假设.我不知道如何解释什么是专门的手段或为什么@objc在那里.

3   SelfieSuperStarz                0x10007b708 specialized _ArrayBuffer._getElementSlowPath(Int) -> AnyObject + 116
4   SelfieSuperStarz                0x10007ea40 specialized Merger.merge(completion : () -> (),assets : [Asset]) -> () + 1444 (Merger.swift:0)
5   SelfieSuperStarz                0x100071f3c specialized AssetView.finish(UIButton) -> () + 520 (Merger.swift:0)
6   SelfieSuperStarz                0x1000712d0 @objc AssetView.finish(UIButton) -> () + 40 (AssetView.swift:0)

只是不确定错误发生在哪里,因为该行显示为Merger:0并且我不确定那些标题(special / objc)是什么意思,如果他们告诉我任何事情.

这是我在Merger中的合并功能.我使用各种循环和计算不透明度并确定事情,但我在位置检查nil.

func merge(completion:@escaping () -> Void,assets:[Asset]) {

    self.setupAI()

    let assets = assets.sorted(by: { $0.layer.zPosition < $1.layer.zPosition })
    if let firstAsset = controller.firstAsset {

        let mixComposition = AVMutableComposition()

        let firstTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo,preferredTrackID: Int32(kCMPersistentTrackID_Invalid))

        do {
            try firstTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero,self.controller.realDuration),of: firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0],at: kCMTimeZero)
        } catch _ {
            print("Failed to load first track")
        }

        let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0]

        var myTracks:[AVMutableCompositionTrack] = []
        var ranges:[ClosedRange<CMTime>] = []

        for asset in assets {

            let secondTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo,preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
            secondTrack.preferredTransform = asset.asset.preferredTransform
            do {
                try secondTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero,asset.endTime-asset.beginTime),of: asset.asset.tracks(withMediaType: AVMediaTypeVideo)[0],at: CMTime(seconds: CMTimeGetSeconds(asset.beginTime),preferredTimescale: 600000))
            } catch _ {
                print("Failed to load second track")
            }
            if(ranges.count == 0) {
                ranges.append(asset.beginTime...asset.endTime)
            }
            else {
                var none = true
                for range in ranges {
                    let start = range.contains(asset.beginTime)
                    let end = range.contains(asset.endTime)
                    var connection = false
                    var nothing = false

                    //This range is completely encompassed (begin and end inside)
                    if(start && end) {
                        //Don't add to the rnge
                        none = false
                        nothing = true
                    }

                    //Begin is in range (right side)
                    else if(start && !end) {
                        connection = true
                        none = false
                    }

                    //End is in range (left side)
                    else if(!start && end) {
                        connection = true
                        none = false
                    }

                    var connected = false
                    //It connects 2 different timess
                    if(connection) {
                        for range2 in ranges {
                            if(range != range2) {
                                if(start && range2.contains(asset.endTime)) {
                                    let index = ranges.index(of: range)
                                    if(index != nil) {
                                        ranges.remove(at: index!)
                                        ranges.append(range.lowerBound...range2.upperBound)
                                        connected = true
                                        break
                                    }
                                }
                                else if(end && range2.contains(asset.beginTime)) {
                                    let index = ranges.index(of: range)
                                    if(index != nil) {
                                        ranges.remove(at: index!)
                                        ranges.append(range.lowerBound...range2.upperBound)
                                        connected = true
                                        break
                                    }
                                }
                            }
                        }
                    }
                    if(!connected && !none && !nothing) {
                        if(start) {
                            let index = ranges.index(of: range)
                            if(index != nil) {
                                ranges.remove(at: index!)
                                ranges.append(range.lowerBound...asset.endTime)
                            }
                        }
                        else if(end) {
                            let index = ranges.index(of: range)
                            if(index != nil) {
                                ranges.remove(at: index!)
                                ranges.append(asset.beginTime...asset.endTime)
                            }
                        }
                    }
                }
                if(none) {
                    ranges.append(asset.beginTime...asset.endTime)
                }
            }
            myTracks.append(secondTrack)
        }

        for range in ranges {
            print(CMTimeGetSeconds(range.lowerBound),CMTimeGetSeconds(range.upperBound))
        }
        for assets in self.controller.assets {
            print(CMTimeGetSeconds(assets.beginTime),CMTimeGetSeconds(assets.endTime))
        }

        if let loadedAudioAsset = self.controller.audioAsset {
            let audioTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeAudio,preferredTrackID: 0)
            do {
                try audioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero,of: loadedAudioAsset.tracks(withMediaType: AVMediaTypeAudio)[0],at: kCMTimeZero)
            } catch _ {
                print("Failed to load Audio track")
            }
        }

        let mainInstruction = AVMutableVideoCompositionInstruction()
        mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero,self.controller.realDuration)

        // 2.2
        let firstInstruction = self.videoCompositionInstructionForTrack(firstTrack,firstAsset)
        var instructions:[AVMutableVideoCompositionLayerInstruction] = []
        var counter:Int = 0
        for tracks in myTracks {
            let secondInstruction = self.videoCompositionInstructionForTrack(tracks,assets[counter].asset,type:true)
            let index = myTracks.index(of: tracks)

            //This should never be nil,but if it is,it might cause opacity's to go out of whack for that specific track. Only reason I can think of why I am crashing in this method.
            if(index != nil) {
                if(index! < assets.count-1) {
                    for i in (counter+1...assets.count-1) {
                        if(assets[counter].endTime > assets[i].endTime) {
                            secondInstruction.setOpacity(1.0,at: assets[i].endTime)
                            secondInstruction.setOpacity(0.0,at: assets[counter].endTime)
                            print("Bigger")
                            break
                        }
                    }
                }
                if(index! > 0) {
                    for i in (0...counter).reversed() {
                        if(assets[counter].endTime < assets[i].endTime) {
                            secondInstruction.setOpacity(0.0,at: assets[counter].endTime)
                            print("Smaller")
                            break
                        }
                    }
                }
                if(counter < myTracks.count-1) {
                    if(assets[counter].layer.zPosition <= assets[counter+1].layer.zPosition) {
                        secondInstruction.setOpacity(0.0,at: assets[counter+1].beginTime)
                    }
                    else {
                        secondInstruction.setOpacity(0.0,at: assets[counter].endTime)
                    }
                }
                instructions.append(secondInstruction)
                counter += 1
            }
        }

        for range in ranges {
            firstInstruction.setOpacity(0.0,at: range.lowerBound)
            firstInstruction.setOpacity(1.0,at: range.upperBound)
        }

        // 2.3
        mainInstruction.layerInstructions = [firstInstruction] + instructions

        let imageLayer = CALayer()
        let image = UIImage(named: "Watermark")
        imageLayer.contents = image!.cgImage

        let ratio = (firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize.width/image!.size.width)/2
        let rect = CGRect(x: image!.size.width*ratio,y: 0,width: image!.size.width*ratio,height: image!.size.height*ratio)
        imageLayer.frame = rect
        imageLayer.backgroundColor = UIColor.clear.cgColor
        imageLayer.opacity = 0.75

        let videoLayer = CALayer()
        videoLayer.frame = CGRect(x: 0,width: firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize.width,height: firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize.height)

        let parentlayer = CALayer()
        parentlayer.frame = CGRect(x: 0,height: image!.size.height*ratio)
        parentlayer.addSublayer(videoLayer)
        parentlayer.addSublayer(imageLayer)

        let mainComposition = AVMutableVideoComposition()
        mainComposition.instructions = [mainInstruction]
        mainComposition.frameDuration = CMTimeMake(1,30)
        mainComposition.renderSize = self.controller.firstAsset!.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize
        mainComposition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer,in: parentlayer)

解决方法

很明显,方法“Merger.merge”访问一个不存在的元素.调试器将显示它的位置.

我猜有些线程正在修改你背后的一些数组,以便在某些时候有效的索引变得无效.当你稍后修改“范围”时,“范围内的范围2”就是要求麻烦.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读