2012-10-22 13 views
5

Mam GDB 7.5 zainstalowany w moim komputerze. Wydaje się całkiem-drukarek dla STL już w pakiecie z tej wersji, ponieważ działa:Dość druk STL z GDB i Clang

(gdb) info pretty-printers 

drukuje długą listę wszystkich dostępnych drukarek STL.

Debugowanie kodu C++ skompilowanego za pomocą g ++ daje prawidłowe zachowanie ładnego drukowania. Jednak to samo nie jest przestrzegane, jeśli ten sam kod jest kompilowany z clang ++.

Poniżej znajduje się wyjście kiedy run gdb:

BFD: /usr/lib/libstdc++.6.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/libstdc++.6.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/libSystem.B.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/libSystem.B.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/libc++abi.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/libc++abi.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libcache.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libcache.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libcommonCrypto.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libcommonCrypto.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libcompiler_rt.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libcompiler_rt.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libcopyfile.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libcopyfile.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libdispatch.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libdispatch.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libdnsinfo.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libdnsinfo.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libdyld.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libdyld.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libkeymgr.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libkeymgr.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/liblaunch.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/liblaunch.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libmacho.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libmacho.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libquarantine.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libquarantine.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libremovefile.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libremovefile.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_blocks.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_blocks.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_c.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_c.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_dnssd.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_dnssd.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_info.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_info.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_kernel.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_kernel.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_m.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_m.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_network.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_network.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_notify.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_notify.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libsystem_sandbox.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libsystem_sandbox.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libunc.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libunc.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libunwind.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libunwind.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libxpc.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libxpc.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/system/libcorecrypto.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/system/libcorecrypto.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/libobjc.A.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/libobjc.A.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/libauto.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/libauto.dylib(i386:x86-64): unknown load command 0x2b 
BFD: /usr/lib/libc++.1.dylib(i386:x86-64): unknown load command 0x2a 
BFD: /usr/lib/libc++.1.dylib(i386:x86-64): unknown load command 0x2b 

Chciałbym wiedzieć, w jaki sposób mogę uzyskać kontenery STL dość wydrukowany, gdy kod został skompilowany z brzękiem ++? Pamiętaj, że mogę debugować aplikację; Po prostu nie mogę wydrukować zawartości STL.

Odpowiedz

4

Używany przez ciebie gdb zawiera listę znanych numerów poleceń ładowania Mach-O, ale dwa nowe zostały dodane w Mac OS X 10.8 (LC_SOURCE_VERSION, 0x2a i LC_DYLIB_CODE_SIGN_DRS, 0x2b) i narzeka, że ​​nie ma o tym wiedz. Nie trzeba o tym wiedzieć, w debuggerze nie ma niczego w tych komendach ładowania. Ostrzeżenia powinny być nieszkodliwe.

Lepiej nie używać ani dostarczonego przez Apple gdb (który nie obsługuje Pythona, wiem), ani używać nowego debuggera obsługiwanego przez Apple, LLDB. lldb to całkiem nowy ekscytujący debugger, który szybko się poprawia. Apple rozwijało go od zera (wykorzystując istniejącą infrastrukturę i funkcje Llvm w jak największym stopniu) w ciągu ostatnich kilku lat i jest dziś całkiem zdolny. Został on zaprojektowany od początku do rozszerzenia przez Pythona i łatwo jest tworzyć nowe formatery danych dla typów kontenerów, które możesz napotkać.

Jeśli nie wykorzystali lldb wcześniej, ale są zaznajomieni z gdb, przydatnym ściągawki to strona równoważności dowodzenia nad na http://lldb.llvm.org/lldb-gdb.html

Daj lldb spróbować. To jest przyszłość obsługiwanego debugowania w systemie Mac OS X - jest dziś bardzo dużo do polubienia i jest coraz lepsza w każdym wydaniu. To także open source, możesz to sprawdzić od http://lldb.llvm.org/ i grać samemu.