Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Objective-C抛出调用堆栈_Objective C_Crash_Osx Lion_Callstack - Fatal编程技术网

理解Objective-C抛出调用堆栈

理解Objective-C抛出调用堆栈,objective-c,crash,osx-lion,callstack,Objective C,Crash,Osx Lion,Callstack,一个用户刚刚向我提交了一份bug报告,说我的应用程序崩溃了。用户还附加了一个抛出调用堆栈 造成问题的部分似乎是: 3 My App 0x000000010d005483 My App + 17539 是否有办法将该地址和/或+17539转换为我代码中的行号 请记住,我无法在我的机器上重现该错误,因此我不能仅在调试模式下构建它。请查看苹果的这篇文章 。。。此跟踪类似于在调试器中停止执行时所看到的跟踪,只是没有为您提供方法或函数名(称为符号)。相反,

一个用户刚刚向我提交了一份bug报告,说我的应用程序崩溃了。用户还附加了一个抛出调用堆栈

造成问题的部分似乎是:

       3   My App                0x000000010d005483 My App + 17539
是否有办法将该地址和/或
+17539
转换为我代码中的行号

请记住,我无法在我的机器上重现该错误,因此我不能仅在调试模式下构建它。

请查看苹果的这篇文章

。。。此跟踪类似于在调试器中停止执行时所看到的跟踪,只是没有为您提供方法或函数名(称为符号)。相反,您有十六进制地址和可执行代码—您的应用程序或系统框架—它们所指。您需要将这些地址映射到符号。与Mac OS X的崩溃日志不同,iPhone OS日志在写入时不包含符号信息。在分析iPhone操作系统日志之前,您必须对其进行符号化处理

看看这个苹果

。。。此跟踪类似于在调试器中停止执行时所看到的跟踪,只是没有为您提供方法或函数名(称为符号)。相反,您有十六进制地址和可执行代码—您的应用程序或系统框架—它们所指。您需要将这些地址映射到符号。与Mac OS X的崩溃日志不同,iPhone OS日志在写入时不包含符号信息。在分析iPhone操作系统日志之前,您必须对其进行符号化处理


我一直在使用GDB进行手动符号化。如果你经常这么做的话,那就太麻烦了,但是典型的崩溃日志没有太多的符号,我只需要偶尔对崩溃日志进行一次符号化

程序如下:

  • 将应用程序的.dSYM文件与.app放在同一文件夹中*
  • 打开终端并从步骤1开始将cd放入文件夹
  • 在GDB中启动应用程序:
    $gdb YourApp.app/Contents/MacOS/YourApp
  • 设置打印符号和打印符号文件选项:
    打开打印asm按钮

    打开设置打印符号文件名
  • 使用p/a命令查找堆栈跟踪中每个地址的行号:
    p/a 0x000000010d005483
  • 这些说明来自(显然不再在线)


    *请注意,.dSYM有一个UDID将其绑定到创建它时使用的特定构建。因此,如果您没有原始的.dSYM文件,您就有麻烦了。从理论上讲,您甚至不能从源代码管理中提取相同的修订版本并重新生成,因为这个UDID将不同。

    我一直在使用GDB进行手动符号化。如果你经常这么做的话,那就太麻烦了,但是典型的崩溃日志没有太多的符号,我只需要偶尔对崩溃日志进行一次符号化

    程序如下:

  • 将应用程序的.dSYM文件与.app放在同一文件夹中*
  • 打开终端并从步骤1开始将cd放入文件夹
  • 在GDB中启动应用程序:
    $gdb YourApp.app/Contents/MacOS/YourApp
  • 设置打印符号和打印符号文件选项:
    打开打印asm按钮

    打开设置打印符号文件名
  • 使用p/a命令查找堆栈跟踪中每个地址的行号:
    p/a 0x000000010d005483
  • 这些说明来自(显然不再在线)


    *请注意,.dSYM有一个UDID将其绑定到创建它时使用的特定构建。因此,如果您没有原始的.dSYM文件,您就有麻烦了。理论上,你甚至不能从源代码管理中提取相同的版本并重新生成,因为这个UDID将是不同的。

    谢谢,我现在正在阅读它,我注意到虽然它谈到了iPhone操作系统崩溃报告,但我的应用程序是桌面(Mac OS X)应用程序,Mac OS X崩溃报告有什么不同吗?我相信整个符号化过程仍然存在,但很抱歉,我不应该发布一个特定于is的链接。查看@houbysoft上的这篇博文:一般来说,如果您将崩溃日志拖到Xcode的管理器中,并且磁盘上有用于符号化的必要文件(例如应用程序及其dSYM),那么Xcode将为您进行符号化。@KevinBallard:对,但我没有完整的崩溃报告,只有调用堆栈@Paul.s:谢谢你的链接,但是,当我尝试使用
    dwarfdump
    --lookup
    函数时,它的地址永远找不到任何东西……让用户向你发送完整的崩溃报告。它是CrashReporter保存在他的机器上的。谢谢,我现在正在阅读它,虽然我注意到它谈论的是iPhone OS崩溃报告,但我的应用程序是桌面(Mac OS X)应用程序,Mac OS X崩溃报告有什么不同吗?我相信仍然有整个符号化过程,但很抱歉,我不应该发布一个is特定链接。查看@houbysoft上的这篇博文:一般来说,如果您将崩溃日志拖到Xcode的管理器中,并且磁盘上有用于符号化的必要文件(例如应用程序及其dSYM),那么Xcode将为您进行符号化。@KevinBallard:对,但我没有完整的崩溃报告,只有调用堆栈@Paul.s:谢谢你的链接,但是,当我尝试使用
    dwarfdump
    --lookup
    函数时,它的地址永远找不到任何东西……让用户向你发送完整的崩溃报告。它被CrashReporter保存在他的机器上。刚试过,但在我键入
    p/a 0x000000010d005483
    后,我只得到
    $1=0x10d005483
    ,没有行号或任何东西…刚试过,但在我键入
    p/a 0x000000010d005483
    后,我只得到
    $1=0x10d005483
    ,没有行号或任何东西。。。