2017-07-06 22 views
5

Mam awarię, którą próbuję zlokalizować, a nawet budując aplikację jako debugowanie i jej wykonanie, nie wydaje mi się, żebym dostał jakiekolwiek symboliczne informacje.Swift debugowanie w systemie Linux - brak śledzenia wstecznego

Wyjście otrzymam na konsoli to:

fatal error: unexpectedly found nil while unwrapping an Optional value 
Current stack trace: 
0 libswiftCore.so     0x00007f1c51ca51c0 swift_reportError + 120 
1 libswiftCore.so     0x00007f1c51cbfbe0 _swift_stdlib_reportFatalError + 62 
2 libswiftCore.so     0x00007f1c51ab9be6 <unavailable> + 1186790 
3 libswiftCore.so     0x00007f1c51c18ead <unavailable> + 2625197 
4 libswiftCore.so     0x00007f1c51ab9be6 <unavailable> + 1186790 
5 libswiftCore.so     0x00007f1c51bd4060 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96 
6 myProgram       0x000000000045909e <unavailable> + 364702 
7 myProgram       0x0000000000423f37 <unavailable> + 147255 
8 libdispatch.so      0x00007f1c5276e177 <unavailable> + 278903 
9 libdispatch.so      0x00007f1c52779edd <unavailable> + 327389 
10 libdispatch.so      0x00007f1c5277a890 <unavailable> + 329872 
11 libdispatch.so      0x00007f1c5277c5f4 <unavailable> + 337396 
12 libdispatch.so      0x00007f1c5279aa18 <unavailable> + 461336 
13 libpthread.so.0     0x00007f1c50c6f6ba <unavailable> + 30394 
14 libc.so.6       0x00007f1c4f7b9370 clone + 109 
Illegal instruction (core dumped) 

po prostu nie mogę znaleźć żadnego sposobu, aby rozwinąć na tej informacji, i chociaż mogłem pójść pominie pliku mapy. Czuję, że teraz przenieśliśmy się znacznie poza to terytorium dzięki nowoczesnym narzędziom.

Czy ktoś ma jakieś wskazówki, a nawet wie, jak utworzyć kompilację zawierającą więcej informacji.

Ubuntu 16.04, Swift 3.1.1

+0

Pomocne będzie [mcve]. –

+1

Który kod działa w momencie awarii? Pokaż ten kod, aby pomóc społeczności. – MwcsMac

+0

@MartinR, może być pewne niezrozumienie tego, o co proszę. Pytam, czy istnieje sposób dodania symbolicznych informacji do kompilacji debugowania, aby dać mi ślad wstecznego stosu lub coś, co dałoby mi coś do pracy. Niestety nie jest to problem, który pasuje do przykładowego paradygmatu. Gdybym był w stanie stworzyć odtwarzalny przykład, byłbym w stanie to naprawić. –

Odpowiedz

6

Tak, niestety, wydaje się to być błąd w lldb, który korzysta z lokalnych symboli ELF plików wykonywalnych, a dladdr nie można ich znaleźć na platformach Linux.

Zobacz raport o błędzie tutaj: https://bugs.swift.org/browse/SR-755

UWAGA:

Wspaniała wiadomość choć istnieje skrypt bash, który wykonuje całą pracę za Ciebie. Wskazówki są niewielkie, ale to, co trzeba zrobić:

Pobierz ten skrypt: https://raw.githubusercontent.com/apple/swift/master/utils/symbolicate-linux-fatal

Exectute aplikację upaść.

$ myApp &> crash.log 

Następnie wykonaj skrypt.

$ ./symbolicate-linux-fatal myApp crash.log 

Pomogło mi to bez końca.

+0

Ten problem napotkałem, próbując uruchomić 'swift test' na Ubuntu 16.04. Gdzie mogę znaleźć plik wykonywalny, który coś lubi 'myApp'? –

Powiązane problemy