A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jobs 中级黑马   /  2014-9-25 12:49  /  2339 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有程序的地方就有bug,有bug的地方就需要debug。对于程序员来说,coding的过程便是制造bug和解决bug。Objective定义了不少表达式来协助debug的流程,将这些表达式用在NSLog中,可以简化部分工作,快速定义到debug的部分。 比如以下代码:

-(id) initWithPlayer:(VVPlayer *)aPlayer seatsNum:(int)seatsNum
{ if (self = [super init])
{
NSLog(@”\n Function: %s\n Pretty function: %s\n Line: %d\n File: %s\n Object: %@”,__func__, __PRETTY_FUNCTION__, __LINE__, __FILE__, aPlayer);  
}

}
输出结果为:



__func__, __PRETTY_FUNCTION__, __LINE__, __FILE__等都是系统预留的定义词,简单易用。



另外有一些Core Foundation的方法可以从CFString的层级拿到一些有用的字符串,包括且不限于selector,class,protocol等,参考下面的代码:

-(id) initWithPlayer:(VVPlayer *)aPlayer seatsNum:(int)seatsNum
{ if (self = [super init])
{NSLog(@”Current selector: %@”, NSStringFromSelector(_cmd));  
NSLog(@”Object class: %@”, NSStringFromClass([self class]));  
NSLog(@”Filename: %@”, [[NSString stringWithUTF8String:__FILE__] lastPathComponent]);  
}

}
输出结果为:




拿到了相关的字符串,其实这并不仅在调试中有用,在进行selector的传递时也很好用~

评分

参与人数 2技术分 +1 黑马币 +14 收起 理由
zrtalent + 12 很给力!
★彬★卍囧神 + 1 + 2

查看全部评分

13 个回复

倒序浏览
本帖最后由 Jobs 于 2014-9-25 12:55 编辑

为方便小白阅读,重新上传一下文中所提到的两段代码的截图。因为中间诡异的出现的了表情,在我发布之后才看见。

第一段代码:

第二段代码:

QQ截图1.png (6.29 KB, 下载次数: 27)

第一段代码

第一段代码

QQ图片2.jpg (51.03 KB, 下载次数: 28)

第二段代码

第二段代码
回复 使用道具 举报
有个问题想问一下,为什么用Xcode编译运行我的一些C程序的时候会自动设置断点进入debug呢?
回复 使用道具 举报
Lizzie 发表于 2014-9-25 20:51
有个问题想问一下,为什么用Xcode编译运行我的一些C程序的时候会自动设置断点进入debug呢? ...

你说的中断是   野指针,一类的错误吧
回复 使用道具 举报
小叶子 发表于 2014-9-25 21:50
你说的中断是   野指针,一类的错误吧

刚刚百度了下,应该是。谢谢
回复 使用道具 举报
其实断点调试也是很重要的方法,log也是很重要的
回复 使用道具 举报
Lizzie 发表于 2014-9-25 22:03
刚刚百度了下,应该是。谢谢

野指针错误,因为我经常犯,所以比较敏感~
回复 使用道具 举报
请问这位同学你真的会么?给我告诉我在哪里复制的?
回复 使用道具 举报
Jobs 中级黑马 2014-9-29 13:57:19
9#
zrtalent 发表于 2014-9-29 13:30
请问这位同学你真的会么?给我告诉我在哪里复制的?

同学你好,你有什么问题可以直接提问,我能回答的都会尽量回答,但不要这里主观臆断,这样会显的心智很不成熟,帖子的重点在于技术交流,这就好比你处一个对象,你会管她之前跟谁睡过吗?自己睡着舒服不就得了。
回复 使用道具 举报
Jobs 发表于 2014-9-29 13:57
同学你好,你有什么问题可以直接提问,我能回答的都会尽量回答,但不要这里主观臆断,这样会显的心智很不 ...

首先我要回答你最后一个回答就是我很在意对象这个问题。我想你也是的!不用狡辩。还有一点就是你彻底懂了这个代码的含义了吗?然后你就拿出来交流?这样就不是交流而是提问!拿出你真机上测试的Xcode图片
回复 使用道具 举报
cross 中级黑马 2014-9-29 14:13:51
11#
对于二楼两位的争吵我只能说    我要考前五:handshake
回复 使用道具 举报
Jobs 中级黑马 2014-9-29 14:28:21
12#
zrtalent 发表于 2014-9-29 14:04
首先我要回答你最后一个回答就是我很在意对象这个问题。我想你也是的!不用狡辩。还有一点就是你彻底懂了 ...

    同学你好,你很在意这个问题跟我发这个帖没有多少任何关系,因为我针对的是想从我的分享中获得些许益处的同学,哪怕事一点启发也好,而不是总纠结自己对象之前都跟谁睡过的同学。你在不在意也说明不了什么,而且请睁开你的钛合金大眼好好看清楚我所发的板块是‘论坛提问’板块,是你自作多情的认为我在跟你交流什么,请问很有必要吗?程序运行的图片也都上传在上面用来给对这个题目有兴趣的同学进行参考借鉴。而我从未声明这是正规教程。虽然我不知道要饭还嫌馊适不适用于你,但如果你真的对我所提到的问题感兴趣,你应该自己努力的去研究你认为满意的答案并发在论坛里供同学们参考与借鉴,而非在这里穷叫唤,因为那样只会显的你的时间很不值钱。关于你所提出的“你彻底懂了这个代码的含义了吗”这个问题我想教给你一个解决你在这个世界上所有问题的答案,第一个就是“关你屁事”第二个就是“关我屁事”你听明白了吗?谢谢。希望我的回答令你满意。
回复 使用道具 举报
额,我能不能问一个问题,其实我一直都想知道,编译和运行的区别。什么叫编译,什么又是运行呢。为什么我们程序在执行的时候要分这么两个过程。。。
回复 使用道具 举报
Jobs 中级黑马 2014-9-30 09:46:45
14#
coyote 发表于 2014-9-29 22:36
额,我能不能问一个问题,其实我一直都想知道,编译和运行的区别。什么叫编译,什么又是运行呢。为什么我们 ...

编译就是把你的c代码翻译成二进制代码,
运行是运行一个可执行程序,需要编译,连接等步骤才能最终得到一个可运行的.exe程序。(.exe是对于windows操作系统来说的,类unix系统可能是另外一回事。)
现在有时候人们说编译把连接也包括进去了。连接是把你编译过的模块连接成可执行程序。

既然是编译,那么它就依赖特定的编译器,编译过程检察的错误根据c标准,同时也在一定程度上依赖你的编译器,有些代码在其中一种编译器能通过但是在另一种编译器就不能通过,比如清除屏幕函数clrscr() 是tc编译器提供的函数,包含了这样函数的代码就不能在dev-c中通过。

sizeof(type)是求得type类型的所占的字节数。它是个 运算符
充分利用sizeof()能提高你程序的可移植性,比如有些机器int 占用4个字节 有些占用2个字节。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马