GDB回溯不会在Mac上显示功能名称

时间:2011-06-27 07:29:47

标签: objective-c debugging macos gdb backtrace

我用这个代码用gdb测试了一些东西(这是一个错误的代码,我只是出于测试目的而使用它):

#import <Foundation/Foundation.h>

int main (int argc, char **argv)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    int i = 1;  

    NSLog(@"Hi GDB, i is %@", i);

    [pool release];
    return 0;
}

然后我编译它:gcc -Wall -g -framework Foundation testGdb.m -o testGdb,我运行它:

gdb ./a.out 
GNU gdb 6.3.50-20050815 (Apple version gdb-1518) (Sat Feb 12 02:52:12 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries ..... done

(gdb) run
Starting program: /Users/Tarek/Desktop/a.out 
Reading symbols for shared libraries .++++....................... done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x000000000000002a
0x00007fff82d7a0a3 in objc_msgSend_fixup ()
(gdb) bt
#0  0x00007fff82d7a0a3 in objc_msgSend_fixup ()
#1  0x0000000000000000 in ?? ()

(gdb)

奇怪的是,在(#1)中没有名字,正确的输出通常会打印NSLog(崩溃的原因)和主要。

感谢您帮助理解这种奇怪的行为。

1 个答案:

答案 0 :(得分:1)

This答案最有可能也适用于此。

调试符号与问题无关 - GDB可以在没有它们的情况下展开堆栈(只需要展开描述符)。