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

XCode的一些調試技巧

移動開發 iOS
本文介紹了一些在XCode編程中常見的一些編譯報錯解決方法,并進行了細致的描述,希望能幫助讀者朋友在編程過程中遇到的一些錯誤問題。

XCode 內置GDB,我們可以在命令行中使用 GDB 命令來調試我們的程序。下面將介紹一些常用的命令以及調試技巧。

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

比如:

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

[cpp]  view plain copy print ?
 
  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 命令 :有點類似于格式化輸出,可以輸出對象的不同信息:

如:

[cpp]  view plain copy print ?
 
  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 命令:我們可以查看內存地址所在信息

比如 "info symbol 內存地址" 可以獲取內存地址所在的 symbol 相關信息:

[cpp]  view plain copy print ?
 
  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 *內存地址 " 可以獲取內存地址所在的代碼行相關信息:

[cpp]  view plain copy print ?
 
  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 相關的信息。如:show version 顯示GDB版本信息

[cpp]  view plain copy print ?
 
  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 命令:如果忘記某條命令的語法了,可以使用 help 命令名 來獲取幫助信息。如:help info 顯示 info 命令的用法。

[cpp]  view plain copy print ?
 
  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)   

在系統拋出異常處設置斷點

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

責任編輯:閆佳明 來源: oschina
相關推薦

2012-05-21 10:13:05

XCode調試技巧

2011-06-01 16:50:21

JAVA

2009-11-27 13:04:16

VS2005遠程調試

2013-04-18 10:19:40

iOS開發Xcode調試

2011-05-23 18:06:24

站內優化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技巧文件

2018-05-07 08:22:19

LinuxImageMagick查看圖片

2017-09-20 15:07:32

數據庫SQL注入技巧分享

2020-04-08 10:21:58

bash腳本語言

2020-04-14 09:22:47

bash腳本技巧

2009-11-26 10:32:57

PHP代碼優化

2011-07-26 17:43:49

Xcode SVN

2024-03-11 15:08:26

Linux操作系統進程

2021-06-18 07:35:46

Java接口應用

2017-08-23 09:26:16

Chromelive 狀態代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产激情在线看 | 91久久久久久久久久久 | 毛片免费视频 | 国产精品毛片无码 | 国产精品久久久久久久免费大片 | 一级欧美一级日韩片 | 日韩免费在线视频 | www.五月天婷婷.com | 日韩网站在线观看 | 色播久久 | 精品一区二区三区四区 | 天堂va在线 | 免费在线观看黄视频 | 91社区在线观看高清 | 在线观看第一区 | 国产一区二区三区四区五区加勒比 | 瑞克和莫蒂第五季在线观看 | 欧美一级在线 | 亚洲精品小视频在线观看 | 超碰在线影院 | 99视频免费播放 | 一区二区三区四区在线视频 | 国产电影一区二区三区爱妃记 | 精品三级在线观看 | 国产成人综合在线 | 成人av资源在线 | 欧美成人一区二区 | 亚洲免费观看视频网站 | 91精品国产一区二区三区 | 国产精品91视频 | 精品国产乱码久久久久久1区2区 | 色毛片 | 成人黄色在线观看 | 国产一区二区三区亚洲 | 国产精品爱久久久久久久 | 日韩毛片在线免费观看 | 中文字幕在线二区 | 青青99| 狠狠干综合视频 | 中文字幕在线一区二区三区 | 一级黄色影片在线观看 |