[swift-users] stack trace of Swift executable

Alex Blewitt alblue at apple.com
Wed May 3 04:47:50 CDT 2017


Greg,

This occurs when compiled with swiftc -g as well. In fact, I think 'swift build', when run by default, will compile with swiftc -g. It's only when you run 'swift build --configuration release' that it will compile without it.

$ swiftc --version
Apple Swift version 3.1 (swift-3.1.1-RELEASE)
Target: x86_64-apple-macosx10.9
$ swiftc -g main.swift
$ ./main
Hello, world!
fatal error: unexpectedly found nil while unwrapping an Optional value
Current stack trace:
0    libswiftCore.dylib                 0x000000010edc7160 swift_reportError + 125
1    libswiftCore.dylib                 0x000000010ede3ac0 _swift_stdlib_reportFatalError + 60
2    libswiftCore.dylib                 0x000000010ebd4260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
3    libswiftCore.dylib                 0x000000010ed4f120 partial apply for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never).(closure #2) + 109
4    libswiftCore.dylib                 0x000000010ebd4260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
5    libswiftCore.dylib                 0x000000010ed01d00 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96
6    main                               0x000000010eb91340 say(message : String?) -> () + 248
7    main                               0x000000010eb911e0 main + 328
8    libdyld.dylib                      0x00007fffb444d234 start + 1
Illegal instruction: 4

Note that lldb can symbolicate the result and identify the return value, by looking at the backtrace:

$ lldb main
(lldb) target create "main"
Current executable set to 'main' (x86_64).
(lldb) run
Process 33032 launched: '/tmp/main' (x86_64)
Hello, world!
fatal error: unexpectedly found nil while unwrapping an Optional value
2017-05-03 10:41:17.340963+0100 main[33032:55100807] fatal error: unexpectedly found nil while unwrapping an Optional value
Current stack trace:
0    libswiftCore.dylib                 0x00000001002c1160 swift_reportError + 125
1    libswiftCore.dylib                 0x00000001002ddac0 _swift_stdlib_reportFatalError + 60
2    libswiftCore.dylib                 0x00000001000ce260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
3    libswiftCore.dylib                 0x0000000100249120 partial apply for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never).(closure #2) + 109
4    libswiftCore.dylib                 0x00000001000ce260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
5    libswiftCore.dylib                 0x00000001001fbd00 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96
6    main                               0x0000000100001340 say(message : String?) -> () + 248
7    main                               0x00000001000011e0 main + 328
8    libdyld.dylib                      0x00007fffb444d234 start + 1
Process 33032 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never + 96
libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never:
->  0x1001fbd60 <+96>: ud2    
    0x1001fbd62 <+98>: nopw   %cs:(%rax,%rax)

libswiftCore.dylib`protocol witness table accessor for <A> Swift.AnySequence<A> : Swift.Sequence in Swift:
    0x1001fbd70 <+0>:  pushq  %rbp
    0x1001fbd71 <+1>:  movq   %rsp, %rbp
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
  * frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never + 96
    frame #1: 0x0000000100001438 main`say(message=nil) -> () at main.swift:5
    frame #2: 0x0000000100001328 main`main at main.swift:8
    frame #3: 0x00007fffb444d235 libdyld.dylib`start + 1
    frame #4: 0x00007fffb444d235 libdyld.dylib`start + 1

I suspect this is because Swift is generating a .dSYM which is read by LLDB but either not read or not loaded by the swift runtime when producing the backtrace:

$ find .
.
./main
./main.dSYM
./main.dSYM/Contents
./main.dSYM/Contents/Info.plist
./main.dSYM/Contents/Resources
./main.dSYM/Contents/Resources/DWARF
./main.dSYM/Contents/Resources/DWARF/main
./main.swift

Here's the main file, for repeatability:

$ cat main.swift 
print("Hello, world!")
let x: String? = nil

func say(message: String?) {
    print(x!) // intentional crash
}

say(message: x)

Alex

> On 2 May 2017, at 22:43, Greg Parker <gparker at apple.com> wrote:
> 
> That doesn't look symbolicated. If it were symbolicated, and the build used -g, you would have a file and line number for the main+345 frame.
> 
> 
>> On May 2, 2017, at 2:31 PM, Nick Snyder via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>> 
>> In practice, I would need the stack trace first to figure out how to reproduce the issue, so lldb doesn't really help.
>> 
>> How would I go about symbolicating this further on macOS (Xcode or otherwise)?
>> 
>> From reading the docs it seems like the crash report I get is already completely symbolicated:
>> https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATION-_DETERMINING_WHETHER_A_CRASH_REPORT_IS_SYMBOLICATED <https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATION-_DETERMINING_WHETHER_A_CRASH_REPORT_IS_SYMBOLICATED>
>> 
>> On Tue, May 2, 2017 at 1:21 AM, Alex Blewitt <alblue at apple.com <mailto:alblue at apple.com>> wrote:
>> If you can reproduce it, and run it under lldb, it will print the source line for you:
>> 
>> $ lldb .build/debug/main
>> (lldb) target create ".build/debug/main"
>> ruCurrent executable set to '.build/debug/main' (x86_64).
>> (lldb) run
>> Process 19013 launched: '/private/tmp/main/.build/debug/main' (x86_64)
>> Hello, world!
>> fatal error: unexpectedly found nil while unwrapping an Optional value
>> 2017-05-02 09:17:11.351608+0100 asdf[19013:54205130] fatal error: unexpectedly found nil while unwrapping an Optional value
>> Current stack trace:
>> 0    libswiftCore.dylib                 0x00000001002c1160 swift_reportError + 125
>> 1    libswiftCore.dylib                 0x00000001002ddac0 _swift_stdlib_reportFatalError + 60
>> 2    libswiftCore.dylib                 0x00000001000ce260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
>> 3    libswiftCore.dylib                 0x0000000100249120 partial apply for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never).(closure #2) + 109
>> 4    libswiftCore.dylib                 0x00000001000ce260 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
>> 5    libswiftCore.dylib                 0x00000001001fbd00 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96
>> 6    main                               0x0000000100001340 say(message : String?) -> () + 248
>> 7    main                               0x00000001000011e0 main + 328
>> 8    libdyld.dylib                      0x00007fffb444d234 start + 1
>> Process 19013 stopped
>> * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
>>     frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never + 96
>> libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never:
>> ->  0x1001fbd60 <+96>: ud2    
>>     0x1001fbd62 <+98>: nopw   %cs:(%rax,%rax)
>> 
>> libswiftCore.dylib`protocol witness table accessor for <A> Swift.AnySequence<A> : Swift.Sequence in Swift:
>>     0x1001fbd70 <+0>:  pushq  %rbp
>>     0x1001fbd71 <+1>:  movq   %rsp, %rbp
>> 
>> (lldb) bt
>> * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
>>   * frame #0: 0x00000001001fbd60 libswiftCore.dylib`function signature specialization <preserving fragile attribute, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, file : Swift.StaticString, line : Swift.UInt, flags : Swift.UInt32) -> Swift.Never + 96
>>     frame #1: 0x0000000100001438 main`say(message=nil) -> () at main.swift:5
>>     frame #2: 0x0000000100001328 main`main at main.swift:8
>>     frame #3: 0x00007fffb444d235 libdyld.dylib`start + 1
>>     frame #4: 0x00007fffb444d235 libdyld.dylib`start + 1
>> 
>> There is a symbolication tool available for Linux in the ~/swift/utils/symbolicate-linux-fatal, and Xcode can do the same symbolication for you as well.
>> 
>> Alex
>> 
>>> On 28 Apr 2017, at 22:28, Nick Snyder via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>>> 
>>> I have a simple main.swift that looks like this:
>>> 
>>> ```
>>> print("Hello, world!")
>>> let x: String? = nil
>>> 
>>> func say(message: String?) {
>>>     print(x!) // intentional crash
>>> }
>>> 
>>> say(message: x)
>>> ```
>>> 
>>> Running this results in the crash
>>> 
>>> ```
>>> $ swift build && ./.build/debug/hello
>>> Hello, world!
>>> fatal error: unexpectedly found nil while unwrapping an Optional value
>>> Current stack trace:
>>> 0    libswiftCore.dylib                 0x0000000110120130 swift_reportError + 129
>>> 1    libswiftCore.dylib                 0x000000011013cb50 _swift_stdlib_reportFatalError + 60
>>> 2    libswiftCore.dylib                 0x000000010ff2d250 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
>>> 3    libswiftCore.dylib                 0x00000001100a7e90 partial apply for (_fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never).(closure #2) + 109
>>> 4    libswiftCore.dylib                 0x000000010ff2d250 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 342
>>> 5    libswiftCore.dylib                 0x000000011005a9a0 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96
>>> 6    hello                              0x000000010fee6200 main + 345
>>> 7    libdyld.dylib                      0x00007fffe0375234 start + 1
>>> Illegal instruction: 4
>>> ```
>>> 
>>> From the crash, how do I map back line 6 to an actual line in main.swift?
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users at swift.org <mailto:swift-users at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
>> 
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org <mailto:swift-users at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170503/17f08ce3/attachment.html>


More information about the swift-users mailing list