成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

XCode的一些調(diào)試技巧

移動(dòng)開(kāi)發(fā) iOS
XCode 內(nèi)置GDB,我們可以在命令行中使用 GDB 命令來(lái)調(diào)試我們的程序。下面將介紹一些常用的命令以及調(diào)試技巧。

po 命令:為 print object 的縮寫(xiě),顯示對(duì)象的文本描述(顯示從對(duì)象的 description 消息獲得的字符串信息)。

比如:

上圖中,我使用 po 命令顯示一個(gè) NSDictionary 的內(nèi)容。注意在左側(cè)我們可以看到 dict 的一些信息:3 key/value pairs,顯示該 dict 包含的數(shù)據(jù)量,而展開(kāi)的信息顯示 isa 層次體系(即class 和 metaclass結(jié)構(gòu)關(guān)系)。我們可以右擊左側(cè)的 dict,選中“Print Description of "dict"”,則可以在控制臺(tái)輸出 dict 的詳細(xì)信息:

 

 

 view plaincopyprint?

 

  1. Printing description of dict:  
  2. <CFBasicHash 0x1001149e0 [0x7fff7e27ff40]>{type = immutable dict, count = 3,  
  3. entries =>  
  4.     0 : <CFString 0x100002458 [0x7fff7e27ff40]>{contents = "first"} = <CFString 0x100002438 [0x7fff7e27ff40]>{contents = "one"}  
  5.     1 : <CFString 0x100002498 [0x7fff7e27ff40]>{contents = "second"} = <CFString 0x100002478 [0x7fff7e27ff40]>{contents = "two"}  
  6.     2 : <CFString 0x1000024d8 [0x7fff7e27ff40]>{contents = "third"} = <CFString 0x1000024b8 [0x7fff7e27ff40]>{contents = "three"}  
  7. }  
  8. (gdb)   

 

print 命令:有點(diǎn)類似于格式化輸出,可以輸出對(duì)象的不同信息:

 

如:

 

 

[cpp] view plaincopyprint?

 

  1. (gdb) print (char *)[[dict description] cStringUsingEncoding:4]  
  2. $1 = 0x1001159c0 "{\n    first = one;\n    second = two;\n    third = three;\n}"  
  3. (gdb) print (int)[dict retainCount]  
  4. $2 = 1  
  5. (gdb)   

 

注:4是 NSUTF8StringEncoding 的值。

info 命令:我們可以查看內(nèi)存地址所在信息

比如 "info symbol 內(nèi)存地址" 可以獲取內(nèi)存地址所在的 symbol 相關(guān)信息:

 

 

[cpp] view plaincopyprint?

 

  1. (gdb) info symbol 0x00000001000017f7  
  2. main + 343 in section LC_SEGMENT.__TEXT.__text of /Users/LuoZhaohui/Library/Developer/Xcode/DerivedData/RunTimeSystem-anzdlhiwvlbizpfureuvenvmatnp/Build/Products/Debug/RunTimeSystem  

 

比如 "info line *內(nèi)存地址" 可以獲取內(nèi)存地址所在的代碼行相關(guān)信息:

 

 

[cpp] view plaincopyprint?

 

  1. (gdb) info line *0x00000001000017f7  
  2. Line 62 of "/Users/LuoZhaohui/Documents/Study/RunTimeSystem/RunTimeSystem/main.m" starts at address 0x1000017f7 <main+343> and ends at 0x10000180a <main+362>.  

 

show 命令:顯示 GDB 相關(guān)的信息。如:show version 顯示GDB版本信息

 

 

[cpp] view plaincopyprint?

 

  1. (gdb) show version  
  2. GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Mon Aug  8 20:32:45 UTC 2011)  
  3. Copyright 2004 Free Software Foundation, Inc.  
  4. GDB is free software, covered by the GNU General Public License, and you are  
  5. welcome to change it and/or distribute copies of it under certain conditions.  
  6. Type "show copying" to see the conditions.  
  7. There is absolutely no warranty for GDB.  Type "show warranty" for details.  
  8. This GDB was configured as "x86_64-apple-darwin".  

 

help 命令:如果忘記某條命令的語(yǔ)法了,可以使用 help 命令名 來(lái)獲取幫助信息。如:help info 顯示 info 命令的用法。

 

 

 

[cpp] view plaincopyprint?

 

  1. (gdb) help info  
  2. Generic command for showing things about the program being debugged.  
  3.   
  4. List of info subcommands:  
  5.   
  6. info address -- Describe where symbol SYM is stored  
  7. info all-registers -- List of all registers and their contents  
  8. info args -- Argument variables of current stack frame  
  9. info auxv -- Display the inferior's auxiliary vector  
  10. info breakpoints -- Status of user-settable breakpoints  
  11. info catch -- Exceptions that can be caught in the current stack frame  
  12. info checkpoints -- Help  
  13. info classes -- All Objective-C classes  
  14. ......  
  15.   
  16. Type "help info" followed by info subcommand name for full documentation.  
  17. Command name abbreviations are allowed if unambiguous.  
  18. (gdb)   

 

在系統(tǒng)拋出異常處設(shè)置斷點(diǎn)

有時(shí)候我們的程序不知道跑到哪個(gè)地方就 crash 了,而 crash 又很難重現(xiàn)。保守的做法是在系統(tǒng)拋出異常之前設(shè)置斷點(diǎn),具體來(lái)說(shuō)是在 objc_exception_throw處設(shè)置斷點(diǎn)。設(shè)置步驟為:首先在 XCode 按 CMD + 6,進(jìn)入斷點(diǎn)管理窗口;然后點(diǎn)擊右下方的 +,增加新的 Symbolic Breakpoint,在 Symbol 一欄輸入:objc_exception_throw,然后點(diǎn)擊 done,完成。 這樣在 Debug 模式下,如果程序即將拋出異常,就能在拋出異常處中斷了。比如在前面的代碼中,我讓 [firstObjctcrashTest]; 拋出異常。在 objc_exception_throw 處設(shè)置斷點(diǎn)之后,程序就能在該代碼處中斷了,我們從而知道代碼在什么地方出問(wèn)題了。

責(zé)任編輯:佚名 來(lái)源: 飄飄白云
相關(guān)推薦

2013-03-29 13:17:53

XCode調(diào)試技巧iOS開(kāi)發(fā)

2011-06-01 16:50:21

JAVA

2009-11-27 13:04:16

VS2005遠(yuǎn)程調(diào)試

2013-04-18 10:19:40

iOS開(kāi)發(fā)Xcode調(diào)試

2011-05-23 18:06:24

站內(nèi)優(yōu)化SEO

2021-10-12 23:10:58

UnsafeJavaJDK

2011-07-12 09:47:53

WebService

2011-10-26 20:55:43

ssh 安全

2022-12-02 14:58:27

JavaScript技巧編程

2017-05-10 15:30:30

skynet崩潰程序

2022-02-17 13:58:38

Linux技巧文件

2017-09-20 15:07:32

數(shù)據(jù)庫(kù)SQL注入技巧分享

2018-05-07 08:22:19

LinuxImageMagick查看圖片

2020-04-08 10:21:58

bash腳本語(yǔ)言

2020-04-14 09:22:47

bash腳本技巧

2009-11-26 10:32:57

PHP代碼優(yōu)化

2011-07-26 17:43:49

Xcode SVN

2024-03-11 15:08:26

Linux操作系統(tǒng)進(jìn)程

2021-06-18 07:35:46

Java接口應(yīng)用

2017-08-23 09:26:16

Chromelive 狀態(tài)代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 国产成人精品999在线观看 | 欧美区在线 | 国产精品色哟哟网站 | 999久久久| 亚洲国产成人精品女人久久久 | 国产久| 亚洲精品一区二区另类图片 | 久久国产精品一区 | 精品中文字幕一区二区 | 男女视频在线看 | 综合二区| 亚洲一区二区三区在线免费 | 日韩成人中文字幕 | 久久精品色欧美aⅴ一区二区 | 免费在线播放黄色 | 成人在线视频免费播放 | 91色在线| 一区二区三区韩国 | 国内精品久久久久久影视8 最新黄色在线观看 | 中文字幕11页 | 国产高清精品一区二区三区 | 久久久久久影院 | 99综合 | 欧美国产日韩一区二区三区 | 九色porny自拍视频 | 久久成人精品视频 | 亚洲国产精品自拍 | 青青草网站在线观看 | 日韩欧美久久精品 | 国产精品日韩欧美一区二区三区 | 国户精品久久久久久久久久久不卡 | 精品国产乱码久久久久久蜜柚 | 欧美v免费| 精品视频一区二区三区在线观看 | 久久精品国产一区老色匹 | 81精品国产乱码久久久久久 | 久久在线视频 | 欧美中文字幕一区二区三区亚洲 | 一区二区精品视频 | 久久综合久久综合久久 |