2013-06-07 12 views
5

Moje oprogramowanie używa sygnału SIGUSR2 i używam LLDB (pod Xcode 4.6.2) jako mojego debuggera. Chciałbym wyłączyć LLDB z stoping na SIGUSR2 i zostały robi tak za pomocą polecenia:Wyłączanie sygnałów przy inicjalizacji LLDB

process handle --pass true --stop false --notify true SIGUSR2 

szukam sposobu, aby mieć LLDB zawsze wykonać to polecenie przy starcie. Spróbowałem dodać coś w rodzaju settings append target.process.extra-startup-command process w mojej .lldbinit, ale podczas gdy zmienia to wartość ustawienia target.process.extra-startup-command (o czym świadczy polecenie settings show), nie jestem pewien, czy/jak ja może użyć tego ustawienia, aby zawsze wykonywać polecenie process handle, aby wyłączyć sygnał SIGUSR2.

Jestem świadomy "rozwiązania" zamieszczonego tutaj: Permanently configuring LLDB (in Xcode 4.3.2) not to stop on signals. Szukam jednak bardziej eleganckiego rozwiązania, jeśli takie istnieje.

Odpowiedz

4

Obecnie najbardziej sugestywnym rozwiązaniem jest wykonanie polecenia z przerwą pod numerem main.

gdb miał taki widok świata, w którym wszystkie procesy, bez względu na to, w jakim systemie się znajdują, magicznie reagowały na sygnały UNIX. Więc sensownie było powiedzieć, co się stanie, kiedy proces otrzyma SIGINT, zanim jeszcze zdarzy się proces. W lldb proces, kiedy zostanie utworzony, powie nam, jakie są jego sygnały i ich domyślne zachowania. To urocze, ale oznacza to, że teraz nie ma żadnego naturalnego miejsca na przechowywanie opcji konfiguracyjnych dla zachowań sygnałowych przed rozpoczęciem procesu. To jest coś, co trzeba dodać.

Możliwość wyzwalania "procesów cyklu życia procesu", a nie tylko "uruchomienia procesu", ale "wyjścia procesu" i "ładowania biblioteki współdzielonej" itp. Byłaby świetnym dodatkiem. Ta funkcja jest świetna do zgłoszenia prośby o ulepszenie (http://bugreport.apple.com/), ponieważ takie błędy działają jak głosy dla funkcji.

BTW, target.process.extra-startup-command robi coś zupełnie innego. Pozwala ci na przedrostek niektórych poleceń do sekwencji wysyłanej przez lldb do agenta debugującego (np. Debugserver), zanim zaczniemy działać. Jego głównym zastosowaniem jest włączenie większej liczby rejestrów debugserver.