我想编写一个调试函数或方法来帮助打印有用的信息。当它被调用时,我需要:
- 调用对象的内存地址(如果由对象调用)
- 调用者的方法签名(或方法的名称),或函数的名称
- 拥有该方法或函数的类名
是否可以在不传递一大堆参数的情况下获取这些信息?
我想做一些类似的东西:
debug();
然后它会进入每个方法和函数,并帮助打印出有关正在发生的事情的有用信息。
我的第一直觉是建议使用gdb
和断点,因为大部分信息都可以在堆栈跟踪中找到。然而,如果你真的想看到它被打印出来,有一些方法可以近似你所说的内容
预处理器识别__PRETTY_FUNCTION__
用于打印函数/方法名称的宏,它适用于 Objective-C 方法。如果打印方法名称和值self
在每个感兴趣的方法中,您几乎都生成了一个穷人的堆栈跟踪。
尝试包括一个#define
像这样在每个需要它的文件都包含的标头中:
#define METHOD() printf("%s\t0x%x\n", __PRETTY_FUNCTION__, (unsigned int)self)
然后,每当您想要打印该信息时,只需包含此行:
METHOD();
输出将如下所示:
-[MyClass initWithFoo:bar:] 0x12345678
正如我所提到的,这种方法可能会产生大量输出,而 gdb 可能是一个更实用的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)