让crash文件中的内存地址变成函数名称

转载 2013年12月01日 21:46:59
原文地址:让crash文件中的内存地址变成函数名称作者: NickJackson

假如程序员编译了inhouse给测试。

如果在测试过程中出现奔溃现象,我想程序员一般会来看Device Log也就是 crash文件

如果crash文件遇到如下的情况,在重要的地方看不到函数名称。我想是一件很奔溃的事情。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread:  0
 
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
  libsystem_c.dylib                   0x37c0fe54 strlen + 12
  libstdc++.6.dylib                   0x38202410 std::string::operator=(char const*) + 8
  FishingJoy                           0x003423a0 0x1000 + 3412896
  FishingJoy                           0x00342b90 0x1000 + 3414928
  FishingJoy                           0x002fb3e0 0x1000 + 3122144
  FishingJoy                           0x002fae3c 0x1000 + 3120700
  CoreFoundation                       0x380b4224 -[NSObject performSelector:withObject:] + 36
  FishingJoy                           0x002d5614 0x1000 + 2967060
  CoreFoundation                       0x380b4224 -[NSObject performSelector:withObject:] + 36
  Foundation                           0x3548e750 __NSThreadPerformPerform + 344
10  CoreFoundation                      0x38129afc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8
11  CoreFoundation                      0x3812935e __CFRunLoopDoSources0 + 358
12  CoreFoundation                      0x3812806e __CFRunLoopRun + 646
13  CoreFoundation                      0x380ab4d6 CFRunLoopRunSpecific + 294
14  CoreFoundation                      0x380ab39e CFRunLoopRunInMode + 98
15  GraphicsServices                    0x37e82fc6 GSEventRunModal + 150
16  UIKit                                 0x31c2b73c UIApplicationMain + 1084
17  FishingJoy                           0x0000389c 0x1000 + 10396
18  FishingJoy                           0x0000383c 0x1000 + 10300

 


其实我们可以还原出函数名称,现在需要软件“symbolicatecrash”(点击下载)和编译这台inhouse的电脑。

1、先下载symbolicatecrash,放入一个干净的目录下。顺便把crash文件也拖入此目录。

2、先把app文件给弄出来,步骤Xcode -> Window ->Organizer -> Archives-> 右击给测试的包->“Show inFinder”->“显示包内容”->复制目录“Products/Applications/”下面的.app到symbolicatecrash同级目录下。

3、打开终端(terminal)首先把symbolicatecrash拖入终端,现在终端会显示symbolicatecrash的地址并在末尾加入空格,不要回车然后依次把crash和app都拖入终端。

现在终端应该是(我在这里因为举例,先去掉绝对目录地址。大家看到的应该是一堆):

symbolicatecrash  a.crash a.app

在末尾加入输出地址:

symbolicatecrash  a.crash a.app  b.crash  回车。

现在去输出地址看 b.crash,应该已经成功显示函数名称了。呵呵~

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread:  0
 
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
  libsystem_c.dylib                   0x37c0fe54 strlen + 12
  libstdc++.6.dylib                   0x38202410 std::string::operator=(char const*) + 8
  FishingJoy                           0x003423a0 FishNetCollideHandler::JSONLoaderDidLoad(char const*) + 1936
  FishingJoy                           0x00342b90 non-virtual thunk to FishNetCollideHandler::JSONLoaderDidLoad(char const*) + 32
  FishingJoy                           0x002fb3e0 -[JSONLoaderDelegateEx JSONLoaderDidLoad:withResult:] + 144
  FishingJoy                           0x002fae3c -[JSONLoader requestFinished:] + 352
  CoreFoundation                       0x380b4224 -[NSObject performSelector:withObject:] + 36
  FishingJoy                           0x002d5614 -[ASIHTTPRequest reportFinished] + 164
  CoreFoundation                       0x380b4224 -[NSObject performSelector:withObject:] + 36
  Foundation                           0x3548e750 __NSThreadPerformPerform + 344
10  CoreFoundation                      0x38129afc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8
11  CoreFoundation                      0x3812935e __CFRunLoopDoSources0 + 358
12  CoreFoundation                      0x3812806e __CFRunLoopRun + 646
13  CoreFoundation                      0x380ab4d6 CFRunLoopRunSpecific + 294
14  CoreFoundation                      0x380ab39e CFRunLoopRunInMode + 98
15  GraphicsServices                    0x37e82fc6 GSEventRunModal + 150
16  UIKit                                 0x31c2b73c UIApplicationMain + 1084
17  FishingJoy                           0x0000389c main + 84
18  FishingJoy                           0x0000383c start + 32

相关文章推荐

让crash文件中的内存地址变成函数名称

http://blog.chukong-inc.com/index.php/2012/07/05/让crash文件中的内存地址变成函数名称/ 让crash文件中的内存...
  • whgggg
  • whgggg
  • 2013年07月10日 08:40
  • 1039

内存地址形式转换成可读的Crash日志文件教程

项目中常常会遇到打完ipa包真机测试的时候,遇到闪退问题,但是打开crash日志会发现描述信息都是一些内存地址,这时要分析具体的崩溃地方就没那么容易了,所以需要将log日志变成可以读懂的crash文件...

armlink - Scatter file文件实现将函数放在指定内存地址

armlink - Scatter file文件格式  2010-12-06 21:06:02 分类: LINUX   Scatter file (分散加载描述文件)用于...

C语言深度剖析之—指针与内存地址(函数指针,普通指针,指针数组,数组的指针,指针的指针)

1.    int* p=NULL 与*p=NULL的区别: 1)int* p=NULL, 定义一个指针,其指向的内存保存的是int型的数据,同时p的值为0X00000000(即完成一次初始化);...

Linux 利用虚拟内存地址读写文件

利用虚拟内存读写文件:     虚拟地址映射到内存。        虚拟地址可以映射到文件:可以用内存方式访问文件.        mmap/munmap   实例:使用内存方式写入数据 #inclu...

Delphi通过Map文件查找内存地址出错代码所在行

Delphi通过Map文件查找内存地址出错代码所在行 一 什么是MAP文件       什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示...

Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据...

gdb查看内存地址和栈中的值—查看虚函数表、函数地址

http://blog.sina.com.cn/s/blog_605f5b4f0101ey1q.html  gdb查看指定地址的内存地址的值:examine 简写 x-----使用gdb> he...
  • ztguang
  • ztguang
  • 2016年02月01日 00:00
  • 560

2015-01-16(内存地址_堆栈).part3

  • 2015年12月04日 21:41
  • 70MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让crash文件中的内存地址变成函数名称
举报原因:
原因补充:

(最多只允许输入30个字)