Problem:Jak używać zawartości stosu w warunku punktu przerwania LLDB?
Mam sytuację, w której mamy odtwarzanie multimediów podczas startu i objc_exception_throw() trafia około 5 razy w ciągu tego okresu, ale zawsze złapać, i to sposób południe od obiekt odtwarzacza multimediów.
Mam dość albo (a) konieczności ręcznego kontynuowania n razy, albo (b) konieczności pozostawienia punktów przerwania wyłączonych do czasu zakończenia odtwarzania.
Co próbowałem:
- dokonywania przerwania zignorować pierwsze pięć trafień (problem: to nie zawsze dokładnie pięć razy)
- tworząc własne symboliczne przerwania używając mojego docelowy jako moduł (problem: nic się nie zmieniło)
Co chciałbym zrobić:
Jednym z rozwiązań, które przychodzi na myśl, jest ocena stosu, kiedy punkt krytyczny zostanie trafiony, i kontynuacja, jeśli konkretna metoda lub funkcja jest tam wymieniona. Ale nie mam pojęcia, jak to zrobić.
Inne pomysły również mile widziane.
Cholera, koleś. Najlepsza odpowiedź, na jaką mogłem liczyć. – MikeyWard
Dobra odpowiedź. Jedynym zastrzeżeniem jest to, że będzie to "kontynuacja", jeśli dowolne z 'ignored_functions' pojawi się gdziekolwiek na stosie, zamiast jedynie sprawdzać ramkę" powyżej "' objc_exception_throw'. –
@JasonMolenda Całkowicie poprawne."Gdziekolwiek na stosie" było to, co według mnie było poszukiwane na podstawie "oceny stosu, gdy punkt krytyczny trafi, i kontynuacji, jeśli konkretna metoda lub funkcja jest tam wymieniona". Byłoby łatwo dostosować się do 'if frame.GetThread(). GetFrameAtIndex (1) .GetFunctionName() w ignored_functions:' zamiast tego. Kluczowym wglądem jest użycie funkcji Pythona jako polecenia punktu przerwania. –