Xcode调试攻略

1. Xcode内置GDB,可以使用GDB调试,调试命令:

        1.1 po 命令:为 print object 的缩写,显示对象的文本描述

                    (lldb) po [$eax class]:输出异常对象的地址


                    (lldb) po [$eax name]:输出这个异常的名字
                    

                    (lldb) po [$eax reason]:这个将会输出错误消息:
                    

                    (lldb)  “po $eax”:对这个对象调用“description”方法和打印出来 

                    “$eax”是cup的一个寄存器。在一个异常的情况下,这个寄存器将会包含一个异常对象的指针。注意:$eax只会在模拟器里面工作,假如你在设备上调试,你将需要使用”$r0″寄存器

        1.2 print 命令:有点类似于格式化输出,可以输出对象的不同信息

                    比如:print (char*)[[dic description] cString]、(lldb) print (int)[label retainCount]

        1.3 info 命令:我们可以查看内存地址所在信息

        1.4 info line *内存地址:可以获取内存地址所在的代码行相关信息

        1.5 show 命令:显示 GDB 相关的信息。如:show version 显示GDB版本信息

        1.6 bt: 显示当前进程的函数调用栈的情况;"up num":查看调用的详细信息;down:返回栈列表;l:显示详细代码信息;p:输出数值。

 2. 添加全局断点(Add Exception BreakPoint):

          2.1 添加步骤:

                  1. In the bottom-left corner of the breakpoints navigator, click the Add button. 
                  2. Choose Add Exception Breakpoint. 
                  3. Choose the type of exception from the Exception pop-up menu. 
                  4. Choose the phase of the exception handling process at which you want program execution to stop. 
                  5. Click Done.

           2.2 使用场景:

                   程序因为SIGABRT而crash,想要定位到导致crash的行。

3. 添加符号断点(Add Symbolic BreakPoint):

          3.1 断点执行的时机:Symbolic breakpoints stop program execution when a specific function or method starts executing

          3.2 添加步骤:

                  1. Steps In the bottom-left corner of the breakpoint navigator, click the Add button. 

                  2. Choose Add Symbolic Breakpoint. 
                  3. Enter the symbol name in the Symbol field. 
                  4. Click Done.

          3.3 使用场景:

                       当想让系统在某个指定条件处中断时,设置相应的断点。

                       比如:

                              objc_exception_throw:在系统抛出异常处设置断点。

                              -[NSException raise]:

4. 设置NSZombieEnabled、MallocStackLogging、NSAutoreleaseFreedObjectCheckEnabled、NSDebugEnabled

         4.1 设置方法:

                1. Product->Edit Scheme...->Run...->EnvironmentVariables. 
                2. add NSZombieEnabled,set the value with YES
                3. add MallocStackLogging, set the value with YES.

                4. add NSAutoreleaseFreedObjectCheckEnabled, set the value with YES.

                5. add NSDebugEnabled, set the value with YES.

         4.2 使用场景:

                主要为了解决EXC_BAD_ACCESS问题,MallocStackLogging用来启用malloc记录(使用方式 malloc_history ${App_PID} ${Object_instance_addr})。

          4.3 需要注意的问题

                NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存。

5. 重写respondsToSelector方法

        5.1 实现方式

#ifdef _FOR_DEBUG_
-(BOOL) respondsToSelector:(SEL)aSelector {
    printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]);
    return [super respondsToSelector:aSelector];
}
#endif
        5.2 使用方法:

               需要在每个object的.m或者.mm文件中加入上面代码(应该可以使用类属实现),并且在other c flags中加入-D _FOR_DEBUG_(记住请只在Debug Configuration下加入此标记)。这样当你程序崩溃时,Xcode的console上就会准确地记录了最后运行的object的方法。

参考文章:

1. Xcode GDB 调试:http://blog.youkuaiyun.com/ch_soft/article/details/7005998

2. XCode的一些调试技巧:http://blog.youkuaiyun.com/kesalin/article/details/7222153

3. About the Breakpoint Navigator:http://developer.apple.com/library/mac/#recipes/xcode_help-breakpoint_navigator/articles/about_breakpoint_navigator.html#//apple_ref/doc/uid/TP40010433-CH6-SW1

4. 当程序崩溃的时候怎么办 part-1:http://article.ityran.com/archives/1006

5. 当程序崩溃的时候怎么办 Part-2:http://article.ityran.com/archives/1143

6. Memory Usage Performance Guidelines:https://developer.apple.com/library/mac/#documentation/performance/Conceptual/ManagingMemory/ManagingMemory.html#//apple_ref/doc/uid/10000160-SW1


计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值