如何在iOS中查找所有线程的堆栈跟踪

时间:2019-03-22 06:13:50

标签: ios swift

当应用程序在iOS中运行时,我需要查找所有stacktrace。我使用过Thread.callStackSymbols,但是它只为该特定线程提供堆栈符号,而不为其他线程提供

1 个答案:

答案 0 :(得分:0)

实际上,您要执行的任务非常复杂。
您必须实现自己的堆栈遍历逻辑,才能从其他线程获取堆栈跟踪,因为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