iphone - 如何阅读objective-c堆栈跟踪

标签 iphone objective-c stack-trace

我有以下堆栈跟踪:

0 MyApp 0x000833a3 +[TFCrashHandler backtrace] + 26
1 MyApp 0x000836bd TFSignalHandler + 28
2 libsystem_c.dylib 0x33eac727 _sigtramp + 34
3 ??? 0x00000002 0x0 + 2
4 MyApp 0x000803f1 msgpack_unpack_next + 112
5 MyApp 0x0007faeb +[MessagePackParser parseData:] + 74
6 MyApp 0x0007f84b -[NSData(NSData_MessagePack) messagePackParse] + 26
7 MyApp 0x000254c3 +[Http get:params:cacheMins:msgPack:complete:] + 146
...

我想知道如何阅读它:

  • 我假设我从下往上走,例如第 7 行称为第 6 行称为第 5 行,等等。
  • 第 4 行的“+ 112”是什么意思?这是它崩溃的代码文件中的行号吗?
  • '???' 是什么意思第 3 行是什么意思?

非常感谢

最佳答案

0 MyApp 0x000833a3 +[TFCrashHandler backtrace] + 26

崩溃是由 +[TFCrashHandler backtrace] + 26 产生的;从落在该符号位置的任何指令 + 26 字节。

如果那真的是你的堆栈跟踪的底部并且它在那里崩溃了,那么 TCrashHandler 正在掩盖真正的崩溃。真正的崩溃看起来是上面几帧。

1 MyApp 0x000836bd TFSignalHandler + 28

TFSignalHandler 就是所谓的+backtrace。

2 libsystem_c.dylib 0x33eac727 _sigtramp + 34

Ewww...信号蹦床。应用收到信号,蹦床设置为调用 TFSignalHandler()。

在某些情况下,可能会在随机线程上调用信号处理程序。 IE。这个特定的崩溃与解析器无关,而与其他地方的崩溃有关的可能性很小。但是,在不了解解析器的情况下,我会质疑它是否针对恶意输入进行了强化(这肯定会导致这样的崩溃)。

3 ??? 0x00000002 0x0 + 2

堆栈无法解码。忽视。无意义的。最好的情况;编译器优化的后果。最坏的情况下;有人在堆栈上大便,回溯机制无法弄清楚发生了什么(极不可能 - 通常,堆栈大便飞溅到阻止完整回溯的地步)。

4 MyApp 0x000803f1 msgpack_unpack_next + 112

哦哦...狡猾。有人正在使用 C 来解析东西。它崩溃了。无论是从入口点到函数的 112 字节的指令,都会 boom。但是,不是真的,因为它调用了信号处理程序并由它处理;这仍然是一个繁荣,但信号处理程序已经有效地销毁了额外的法医证据。

“trickzy”评论指出,针对一大堆 o' C 进行优化的编译器最终可能会崩溃帧,以至于崩溃可能发生在远低于此函数的函数中。

5 MyApp 0x0007faeb +[MessagePackParser parseData:] + 74

当出现严重错误时,MessagePackParser 正在解析。

6 MyApp 0x0007f84b -[NSData(NSData_MessagePack) messagePackParse] + 26
7 MyApp 0x000254c3 +[Http get:params:cacheMins:msgPack:complete:] + 146

啊……是的……有人从 HTTP 抓取了一些数据,但它的格式不正确,导致崩溃。

底线;解析器得到虚假输入并崩溃。有一个信号处理程序试图通过创建回溯来提供帮助,但是 - 显然 - 并没有真正透露更多信息。一个长期的替代方案是信号是在其他地方生成的,并且随机选择了这个线程来处理它——如果你可以持续地重新创建这个崩溃,那么随机线程信号的情况是不太可能的。

除非您捕获了输入数据,或者可以以某种方式猜测 msgpack_unpack_next() 可能会如何崩溃,否则如果不提供更多信息,您将不走运。

关于iphone - 如何阅读objective-c堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462214/

相关文章:

ios - 在 scrollToItemAtIndexPath 时避免动画

objective-c - 你能定义一个类(objc_class)参数在编译时有一个需要的子类吗?

ios - 选项卡式应用程序的全局音频播放器

iOS CorePlot 点转换

iphone - NS 字符串比较因 stringWithFormat 失败

iphone - OpenGL ES中glBindAttribLocation函数的使用

objective-c - 如何以编程方式隐藏Mac应用程序中的所有应用程序?

c++ - 如何从崩溃中提取调试信息

java - dumpstack() 和 printStackTrace() 之间的区别

javascript - 何时会在 window.onError 函数上提供正确的堆栈跟踪?