打印方法调用者的信息(方法反向追踪)

转:http://stackoverflow.com/questions/4046833/print-the-name-of-the-calling-function-to-the-debug-log

http://stackoverflow.com/questions/1451342/objective-c-find-caller-of-method

http://ios-blog.co.uk/tutorials/quick-tips/identify-calling-method-in-ios/

#include <execinfo.h>

void *addr[2];
int nframes = backtrace(addr, sizeof(addr)/sizeof(*addr));
if (nframes > 1) {
    char **syms = backtrace_symbols(addr, nframes);
    NSLog(@"%s: caller: %s", __func__, syms[1]);
    free(syms);
} else {
    NSLog(@"%s: *** Failed to generate backtrace.", __func__);
}

NSArray *syms = [NSThread  callStackSymbols];
if ([syms count] > 1) {
    NSLog(@"<%@ %p> %@ - caller: %@ ", [self class], self, NSStringFromSelector(_cmd),[syms objectAtIndex:1]);
} else {
     NSLog(@"<%@ %p> %@", [self class], self, NSStringFromSelector(_cmd));
}

NSString *sourceString = [[NSThread callStackSymbols] objectAtIndex:1];
    // Example: 1   UIKit                               0x00540c89 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
    NSCharacterSet *separatorSet = [NSCharacterSet characterSetWithCharactersInString:@" -[]+?.,"];
    NSMutableArray *array = [NSMutableArray arrayWithArray:[sourceString  componentsSeparatedByCharactersInSet:separatorSet]];
    [array removeObject:@""];

    NSLog(@"Stack = %@", [array objectAtIndex:0]);
    NSLog(@"Framework = %@", [array objectAtIndex:1]);
    NSLog(@"Memory address = %@", [array objectAtIndex:2]);
    NSLog(@"Class caller = %@", [array objectAtIndex:3]);
    NSLog(@"Function caller = %@", [array objectAtIndex:4]);
    NSLog(@"Line caller = %@", [array objectAtIndex:5]);
时间: 2024-10-25 00:04:39

打印方法调用者的信息(方法反向追踪)的相关文章

web打印的几种实现方法(转载)

web打印的几种实现方法(转载) web打印,web打印控件的三种实现方法 做管理系统的时候,打印一直是个棘手的问题,做B/S的系统这个问题就更加突出了!下面举出三种常用的web打印处理方式 1.利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印)   实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功

AspectJ获取方法注解的信息

在使用Aspectj获取方法注解信息的时候,可以使用下面的代码片段: /** * Get value of annotated method parameter */ private <T extends Annotation> T getMethodAnnotation(ProceedingJoinPoint joinPoint, Class<T> clazz) { MethodSignature methodSignature = (MethodSignature) joinP

python之7-3对象的信息/方法获取

我们可以用dir()来获取一个类,一个模块,一个字符串的信息/方法 例如: #可以列出Image模块的方法 >>import Image >>dir(Image) #列出字符串abc的信息,字符串abc其实是类str,也就是列出了str的方法 >>dir('abc') #那么应该有一个方法是__len__() >>'abc'.__len__() 3 #而len('abc'),也可以获取字符串长度,因为len()就是调用的类str中的__len__ 因此 #根

在ASP程序中打印Excel报表的新方法

目前,B/S模式(浏览器/服务器模式)成为企业网上首选的计算模式.由于B/S模式的特殊性,在C/S下相对较易实现的Excel报表打印功能在B/S下却成为一个难点.本人通过研究写了一个基于ASP程序的打印Excel报表的程序.本程序的特点是无须任何组件. Print.asp ------------------------------------------------ <html><title>打印Excel报表</title> <% '控制脚本语言 respon

数据库信息方法:Info API-Medoo使用指南

前一篇<最后查询方法:Last Query API-Medoo使用指南>介绍了使用Medoo的Last Query 方法取得DB的最后查询信息.本文作为Medoo的最后一篇,将介绍如何使用Info方法取得数据库信息. 数据库信息方法: Info API 取得数据库信息. info() 返回值: [string]:字符串. 提示:它返回大量有用的数据库信息. $database = new medoo();   print_r($database->info());   /* Array

使用maven打包添加带有主方法类的信息

一,准备工具 1,请确定在此之前你所有的Java配置以及maven都已经正确配置 二,说明 当我们初次使用maven时,我们在pom.xml所在的目录(也就是项目的根目录)执行 mvn clean package 进行打包项目时,我们在项目输出目录(target)会看到我们指定类型的包,一般来说 maven 默认是 Jar 包,这个时候你 cmd 到该目录,执行 java -jar your-jar-pakage-name.jar,会出现找不到主方法入口的错误: 此时maven告诉我们找不到主方

运行时在方法内部获取该方法的名称及参数相关信息

package com.dongjak.scripts.java.反射; import java.lang.reflect.Method; import net.sf.json.JSONObject; import com.dongjak.annotations.LogTarget; /** * * @author dongjak * * */ public class 运行时在方法内部获取该方法的名称及参数相关信息 { public static void main(String[] args

reuqest获取服务器一些信息方法集合 java

request.getServletContext().getRealPath("/")  获取项目所在服务器的全路径,如:D:\Program Files\apache-tomcat-7.0.25\webapps\TestSytem\ request.getServletPath()    获取客户端请求的路径名,如:/object/delObject request.getServerName()    获取服务器地址,如:localhost request.getServerPo

Android 打印堆栈的几种方法

在Android调试过程中经常会出现程序出现的结果不是我们预期的结果,那就需要加Log打印调试,看调用过程是否正确,此时就需要打印程序的调用栈,特别是Android代码相当庞大,打印堆栈更有利于我们分析问题,下面就记录下平时用到不退出程序打印堆栈的方法. 验证的方法相关简单,在Activity的类中创建一个方法ThrowException,在onCreate中调用此方法,看打印出什么 public void ThrowException() { // 调试打印堆栈而不退出 Log.d(TAG,