Как найти трассировку стека для всех потоков в iOS - PullRequest
0 голосов
/ 22 марта 2019

Мне нужно найти все трассировки стека, когда приложение работает в iOS. Я использовал Thread.callStackSymbols, однако он дает только символ стека для этого конкретного потока, а не для другого потока.

1 Ответ

1 голос
/ 22 марта 2019

На самом деле то, что вы пытаетесь сделать, является очень сложной задачей.
Вы должны реализовать свою собственную логику обхода стека для извлечения трассировки стека из других потоков, потому что Thread.callStackSymbols будет возвращать трассировку стека только для текущего потока.

Я предлагаю вам взглянуть на PLCrashReporter исходный код, особенно на FrameWalker.

Короче говоря, шаги:

  1. Получить список тем с помощью функции task_threads(): https://opensource.plausible.coop/stash/projects/PLCR/repos/plcrashreporter/browse/Source/PLCrashLogWriter.m?at=refs%2Ftags%2F1.0#694

  2. Получение состояний потоков с помощью функции thread_get_state(): https://opensource.plausible.coop/src/projects/PLCR/repos/plcrashreporter/browse/Source/PLCrashFrameWalker_arm.c?at=refs%2Ftags%2F1.0#73

  3. Пройдите по стеку таркета, используя состояние потока: https://opensource.plausible.coop/stash/projects/PLCR/repos/plcrashreporter/browse/Source/PLCrashFrameWalker_arm.c?at=refs%2Ftags%2F1.0#104

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...