面对bug,Mac OS开发更好的保释行为

时间:2009-12-19 17:04:02

标签: xcode macos

当我为iPhone编写程序时,苹果环境在出现问题时会做什么(从“无法识别的选择器”到其他任何东西),应用程序崩溃并在控制台上,我有这个毫无意义的堆栈调试喷出看起来像这样:

2009-12-19 11:57:37.843 ModelsProg[394:207] Stack: (
    30884955,
    2431960329,
    31266875,
    30836342,
    30688962,
    10115,
    2721311,
    2759178,
    2747272,
    2729683,
    2756789,
    38981329,
    30669696,
    30665800,
    2723433,
    2760707,
    9948,
    9802
)

老实说,我想不出更多无用的方式来尝试帮助开发人员跟踪错误。它甚至没有告诉你问题的来源,除非[394:207]是一些神秘的错误指示。

我怎么能:

        
  • 让mac开发环境告诉我行号错误和文件发生
  •     
  • 抑制无意义的堆栈聊天或将其更改为__actual函数名称___作为输出,就像Python的崩溃错误输出看起来一样。

1 个答案:

答案 0 :(得分:1)

您正在运行没有符号的二进制文件(可能是Release二进制文件)崩溃发生在崩溃跟踪机制无法访问符号的位置(如未捕获的异常)。那些#s是通常被查找以产生符号的地址。

通常,对于像这样的堆栈喷出,在喷出之前的行上有未被捕获的异常日志消息。 通常会为您提供所需的所有信息。

但是,如果你需要象征堆栈跟踪,有几种方法可以这样做。

如果您在gdb,则可以使用info symbol 30884955(显然,替换各种数字)来获取有关堆栈跟踪中该地址的符号的更多信息。 info line *30884955可能会产生更有用的结果。

但关键是,您需要符号文件可访问。从Xcode开始,他们应该就在那里(除非你打破了应用程序的符号生成配置)。否则,您需要使用symbol-file命令加载它们。

如果要自动执行此操作或在gdb之外执行符号操作,请使用atos命令。

相关问题