2017-01-17 43 views
12

Mam framework z dylib w mojej aplikacji na iOS, który został skompilowany na innym komputerze. I wyrejestrowany źródła na moim komputerze i próbował instruowania lldb mapować ścieżkę kodu źródłowego za pomocą:Dołączanie źródeł do binarnej dylib w Xcode

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix 

na próżno, wciąż widząc montaż.

Uwaga # 1: dylib został skompilowany z kodu C++ w tej samej wersji Xcode.

Uwaga # 2: Zostałem użyty nm -pa /path/to/dylib do określenia, czy ścieżki do pliku są osadzone w informacji debugowania, a są one, lldb nie gra z jakiegoś powodu.

Dzięki

UPDATE

Mam następnie odpowiedź Jim Ingham jest poniżej i stworzył skrypt, który automatyzuje ten skrypt jest dostępna jako link GIST w tym artykule napisał: https://medium.com/@maxraskin/background-1b4b6a9c65be

Odpowiedz

4

Aby debugować kod zbudowany na jednym komputerze, ale debugowany na innym, musisz zbudować dSYM i udostępnić go na komputerze, na którym debugujesz. Jeśli tego nie zrobiłeś, nic nie zadziała.

Następną rzeczą do sprawdzenia jest to, że lldb zbiera dSYM. Ta strona ma jakiś opis jak działa ten proces:

http://lldb.llvm.org/symbols.html

ale jeśli wszystko inne zawiedzie, można użyć komendy add-dsym aby dodać ją ręcznie.

Jeśli to nadal nie ustaliła twój problem, a następnie wybrać jakiś symbol w dylib i zrobić:

(lldb) image lookup -vn <SYMBOL_NAME> 

lub naprzemiennie znaleźć jakiś adres w załadowanym dylib i zrobić:

(lldb) image lookup -va <ADDRESS> 

Jeśli lldb wykrył dSYM i informacje debugowania są poprawne, jednym z wierszy wyjścia powinien być wpis dla "Kompilatora". To właśnie informacja o debugowaniu wskazuje ścieżkę do pliku źródłowego. Odpowiednią bazą tej ścieżki jest to, czego powinieneś używać w target.source-map. Jeśli nie widzisz tego wpisu, informacje debugowania dla tej jednostki kompilacji są w jakiś sposób zgubione.

Jeśli wszystkie te rzeczy wyglądają dobrze i lldb nadal nie widzi plików źródłowych, najprawdopodobniej pojawi się błąd, w takim przypadku prosimy o zgłoszenie błędu pod numerem http://bugreporter.apple.com.

+0

Dzięki za szczegółową odpowiedź, która zadziałała, faktycznie nie miałem dSYM. Użyłem 'add-dsym' i wskazałem ścieżkę dSYM, następnie użyłem' image lookup -vn 'aby uzyskać ścieżkę kodu źródłowego symbolu, a następnie zmieniłem mapowanie używając' settings set target.source-map/path/prefix/i/got/from/lookup/path/prefix/on/my/machine'. –

+0

Aby zautomatyzować to, użyję instrukcji z http://lldb.llvm.org/symbols.html. –

+0

btw - dla debugowania kompilacji dylib, czy wymagany jest dSYM, czy te same dane są osadzone w pliku karła? –