spotify / XCMetrics

XCMetrics is the easiest way to collect Xcode build metrics and improve developer productivity.
https://xcmetrics.io
Other
1.1k stars 77 forks source link

Crash when parsing activity log file #38

Closed akkrat closed 2 years ago

akkrat commented 3 years ago

We use the latest docker image and Xcode 12.1.

The crash log:

[ NOTICE ] 22/03/2021 17:06:05 [ProcessMetricsJob] fetching log from file:///tmp/7277A4A2-7D1D-4FE5-BDA3-BCFCD68157DC/D6F72682-AEE4-466F-8DCE-FCA4A027B08F.xcactivitylog [job_id: 4DE44B28-C790-462D-A6C9-1AA8E556C4C7]
[ NOTICE ] 22/03/2021 17:06:05 [ProcessMetricsJob] log fetched to file:///tmp/7277A4A2-7D1D-4FE5-BDA3-BCFCD68157DC/D6F72682-AEE4-466F-8DCE-FCA4A027B08F.xcactivitylog [job_id: 4DE44B28-C790-462D-A6C9-1AA8E556C4C7]
0x7fd68045d97f
0x5598e503ee3f, Swift runtime failure: Unexpectedly found nil while unwrapping an Optional value at .build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTimeOptionParser.swift:0
0x5598e503ee3f, function signature specialization <Arg[1] = Dead> of generic specialization <XCLogParser.SwiftCompilerTypeCheckOptionParser> of (extension in XCLogParser):XCLogParser.SwiftCompilerTimeOptionParser.parseNameAndLocation(from: Swift.String) -> Swift.Optional<(Swift.String, Swift.Int, Swift.Int)> at .build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTimeOptionParser.swift:59
0x5598e503ee3f, generic specialization <XCLogParser.SwiftCompilerTypeCheckOptionParser> of (extension in XCLogParser):XCLogParser.SwiftCompilerTimeOptionParser.parseNameAndLocation(from: Swift.String) -> Swift.Optional<(Swift.String, Swift.Int, Swift.Int)> at /build/<compiler-generated>:0
0x5598e503ee3f, closure #1 (Swift.String) -> Swift.Optional<XCLogParser.SwiftTypeCheck> in XCLogParser.SwiftCompilerTypeCheckOptionParser.(parse in _EDF18D047378C5B6247F84B294158F58)(command: Swift.String, occurrences: Swift.Int) -> Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:61
0x5598e503ee3f, reabstraction thunk helper from @callee_guaranteed (@guaranteed Swift.String) -> (@owned Swift.Optional<XCLogParser.SwiftTypeCheck>, @error @owned Swift.Error) to @escaping @callee_guaranteed (@in_guaranteed Swift.String) -> (@out Swift.Optional<XCLogParser.SwiftTypeCheck>, @error @owned Swift.Error) at /build/<compiler-generated>:0
0x5598e503ee3f, generic specialization <Swift.Array<Swift.String>, XCLogParser.SwiftTypeCheck> of (extension in Swift):Swift.Sequence.compactMap<A>((A.Element) throws -> Swift.Optional<A1>) throws -> Swift.Array<A1> at /build/<compiler-generated>:0
0x5598e503ee3f, XCLogParser.SwiftCompilerTypeCheckOptionParser.(parse in _EDF18D047378C5B6247F84B294158F58)(command: Swift.String, occurrences: Swift.Int) -> Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:48
0x5598e503ee3f, closure #1 ((key: Swift.String, value: Swift.Int)) -> Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>> in XCLogParser.SwiftCompilerTypeCheckOptionParser.parse(from: Swift.Dictionary<Swift.String, Swift.Int>) -> Swift.Dictionary<Swift.String, Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:33
0x5598e503ee3f, reabstraction thunk helper from @callee_guaranteed (@guaranteed Swift.String, @unowned Swift.Int) -> (@owned Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>>, @error @owned Swift.Error) to @escaping @callee_guaranteed (@in_guaranteed (key: Swift.String, value: Swift.Int)) -> (@out Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>>, @error @owned Swift.Error) at /build/<compiler-generated>:0
0x5598e503ee3f, generic specialization <Swift.Dictionary<Swift.String, Swift.Int>, Swift.Array<XCLogParser.SwiftTypeCheck>> of (extension in Swift):Swift.Sequence.compactMap<A>((A.Element) throws -> Swift.Optional<A1>) throws -> Swift.Array<A1> at /build/<compiler-generated>:0
0x5598e503ee3f, XCLogParser.SwiftCompilerTypeCheckOptionParser.parse(from: Swift.Dictionary<Swift.String, Swift.Int>) -> Swift.Dictionary<Swift.String, Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:33
0x5598e503d9a4, XCLogParser.SwiftCompilerParser.parse() -> () at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerParser.swift:73
0x5598e502d872, XCLogParser.ParserBuildSteps.(decorateWithSwiftcTimes in _3469993AC311903DEC578A49106939F6)(XCLogParser.BuildStep) -> XCLogParser.BuildStep at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/ParserBuildSteps.swift:298
0x5598e5028456, XCLogParser.ParserBuildSteps.parse(activityLog: XCLogParser.IDEActivityLog) throws -> XCLogParser.BuildStep at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/ParserBuildSteps.swift:95
0x5598e50b7258, function signature specialization <Arg[7] = Dead> of static XCMetricsBackendLib.LogParser.parseFromURL(_: Foundation.URL, machineName: Swift.String, projectName: Swift.String, userId: Swift.String, userIdSHA256: Swift.String, isCI: Swift.Bool, sleepTime: Swift.Optional<Swift.Int>) throws -> XCMetricsBackendLib.BuildMetrics at /build/Sources/XCMetricsBackendLib/UploadMetrics/LogProcessing/LogParser.swift:54
0x5598e50b7dd0, static XCMetricsBackendLib.LogParser.parseFromURL(_: Foundation.URL, machineName: Swift.String, projectName: Swift.String, userId: Swift.String, userIdSHA256: Swift.String, isCI: Swift.Bool, sleepTime: Swift.Optional<Swift.Int>) throws -> XCMetricsBackendLib.BuildMetrics at /build/<compiler-generated>:0
0x5598e50b7dd0, function signature specialization <Arg[3] = Dead> of static XCMetricsBackendLib.MetricsProcessor.process(metricsRequest: XCMetricsBackendLib.UploadMetricsRequest, logURL: Foundation.URL, redactUserData: Swift.Bool) throws -> XCMetricsBackendLib.BuildMetrics at /build/Sources/XCMetricsBackendLib/UploadMetrics/LogProcessing/MetricsProcessor.swift:13
0x5598e50a7812, static XCMetricsBackendLib.MetricsProcessor.process(metricsRequest: XCMetricsBackendLib.UploadMetricsRequest, logURL: Foundation.URL, redactUserData: Swift.Bool) throws -> XCMetricsBackendLib.BuildMetrics at /build/<compiler-generated>:0
0x5598e50a7812, closure #1 () -> () in XCMetricsBackendLib.ProcessMetricsJob.dequeue(Queues.QueueContext, XCMetricsBackendLib.UploadMetricsRequest) -> NIO.EventLoopFuture<()> at /build/Sources/XCMetricsBackendLib/UploadMetrics/Jobs/ProcessMetricsJob.swift:68
0x5598e444d68d, reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping @callee_unowned @convention(block) () -> () at /build/<compiler-generated>:0
0x7fd67fa68406
0x7fd67fa73c28
0x7fd67fa748cd
0x7fd67fa7c521
0x7fd6804526da
0x7fd67e65d71e
0xffffffffffffffff

I create issue on XCLogParser

AhmedAli9009 commented 3 years ago

It's clearly stating that the crash is caused by an optional with nil value. Safely unwrap the optionals

polac24 commented 2 years ago

The PR in XCLogParser has been merged and XCMetrics uses the most recent version, which includes a fix.