掌握VS2010調試 -- 入門指南

1 導言

在軟件開發周期中,測試和修正缺陷(defect,defect與bug的區別:Bug是缺陷的一種表現形式,而一個缺陷是可以引起多種Bug的)的時間遠多于寫代碼的時間。通常,debug是指發現缺陷并改正的過程。修正缺陷緊隨debug之后,或者說二者是相關的。如果代碼中存在缺陷,我們首先要識別造成缺陷的根本原因(root cause),這個過程就稱作調試(debugging)。找到根本原因后,就可以修正缺陷。

那么如何調試代碼呢?Visual Studio提供了很多用于調試的工具。有時調試需要花費大量時間去識別root cause。VS提供了許多輔助調試的便捷的工具。調試器(Debugger)包含錯誤列表、添加斷點、可視化的程序流程、控制執行流程、Data Tips、監視窗口(watch windows)、多線程調試、線程窗口、并行調試概覽以及IntelliTrace調試概覽。我希望本文能夠對調試功能的使用者有所裨益。請注意,本文使用VS2010。某些功能在舊版本中也是一致的,但是VS2010新增了許多features(Labeling breakpoint, Pinned DataTip, Multithreaded Debugging, Parallel debugging and IntelliTrace)。

2 如何啟動調試?

可以通過VS的調試(Debug)菜單啟動調試。點擊調試菜單下的“啟動調試”或者按F5鍵啟動。如果你已經在代碼中加入了斷點,那么執行會自動開始。


圖 啟動調試(Start Debugging)

“附加到進程(Attach to Process)”是另一種啟動調試的方法。Attach Process會為應用程序啟動一個調試會話。可能我們更熟悉ASP.NET Web應用的Attach Process調試。我發了另外兩篇相關的帖子。如下:

  • Debug Your ASP.NET Application that Hosted on IIS
  • Remote IIS Debugging: Debug your ASP.NET Application which is hosted on "Remote IIS Server"

通常我們通過在可能存在問題代碼處加斷點來啟動調試。因此,我們從斷點開始講起。

3 斷點(Breakpoints)

斷點用于通知調試器何時何處暫停程序的執行。通過點擊左邊欄或者按F9鍵在當前行添加斷點。在加斷點之前,你需要知道你的代碼將會出現什么錯誤,在什么地方停止執行。當調試器執行到斷點處時,你可以使用其他的調試工具核對代碼何處出現錯誤。


圖 設置斷點(Set Breakpoint)

3.1 使用斷點進行調試

你已經在你想要暫停執行的地方設置了斷點。現在按F5鍵啟動調試,當程序執行到斷點處時,自動暫停執行。此時你有多種方式來檢查代碼。命中斷點(hit the breakpoint)后,加斷點的行變為黃色,意指下一步將執行此行。

在中斷模式下,你有多條可使用的命令,使用相應命令進行進一步的調試。


圖 斷點工具條(Breakpoint Toolbar)

3.1.1 逐過程(Step Over)

調試器執行到斷點后,你可能需要一條一條的執行代碼。”Step Over“[F10]命令用于一條一條的執行代碼。這將執行當前高亮的行,然后暫停。如果在一條方法調用語句高亮時按F10,執行會停在調用語句的下一條語句上。Step Over會一次整個方法。
debug51
圖: 逐過程(Step Over - F10)

3.1.2 逐語句(Step Into)

它與Step Over相似。唯一的不同是,如果當前高亮語句是方法調用,調試器會進入方法內部。快捷鍵是”F11“
debug52
圖: 逐語句(Step Into - F11)

3.1.3 跳出(Step Out)

當你在一個方法內部調試時會用到它。如果你在當前方法內按Shift - F11,調試器會完成此方法的執行,之后在調用此方法的語句的下一條語句處暫停。

3.1.4 繼續(Continue)

它像是重新執行你的程序。它會繼續程序的執行直到遇到下一個斷點。快捷鍵是”F5“

3.1.5 設置下一語句(Set Next Statement)

這是一個非常有趣的特性。設置下一語句允許你在調試的時候改變程序的執行路徑。如果你的程序在某一行處暫停而且你想改變執行路徑,跳到指定行,在這一行上右擊,在右擊菜單中選擇”設置下一語句“。這樣程序就會轉到哪一行執行而不執行先前的代碼。這在如下情況中非常有用:當你發現代碼中某些行可能會導致程序的中斷(break)而你不想讓程序在那個時候中斷。快捷鍵是Ctrl + Shift + F10
debug3_small
圖: 設置下一語句(Set Next Statement)

3.1.6 顯示下一語句(Show Next Statement [Ctrl+*])

這一行用黃色箭頭標記。這行是程序繼續執行時下一條將執行的語句。

3.2 斷點標簽(Labeling in Break Point)

這是VS2010提供的新特征(feature)。用于更好的管理斷點。它使得我們能夠更好的分組和過濾斷點。這像是對斷點的歸類。如果我們添加了與某一功能相關的不同類型的斷點,我們可以根據需要使能(enable)、取消(disable)、過濾(filter)這些斷點。例如,假設我們要調試一下代碼塊。
[csharp]?view plain?copy
  1. class?Program??
  2. ????{??
  3. ????????static?void?Main(string[]?args)??
  4. ????????{??
  5. ????????????string[]?strNames?=?{?"Name1",?"Name2",?"Name3",?"Name4",?"Name5",?"Name6"?};??
  6. ??
  7. ????????????foreach?(string?name?in?strNames)??
  8. ????????????{??
  9. ????????????????Console.WriteLine(name);???//?BreakPoint??
  10. ????????????}??
  11. ????????????int?temp?=?4;??
  12. ????????????for?(int?i?=?1;?i?<=?10;?i++)??
  13. ????????????{??
  14. ????????????????if?(i?>?6)??
  15. ????????????????????temp?=?5;??
  16. ????????????}??
  17. ????????}??
  18. ??
  19. ????????public?static?void?Method1()??
  20. ????????{??
  21. ????????????Console.WriteLine("Break?Point?in?Method1");???//?BreakPoint??
  22. ????????}??
  23. ??
  24. ????????public?static?void?Method2()??
  25. ????????{??
  26. ????????????Console.WriteLine("Break?Point?in?Method2");??//?BreakPoint??
  27. ????????????Console.WriteLine("Break?Point?in?Method2");??//?BreakPoint??
  28. ????????}??
  29. ??
  30. ????????public?static?void?Method3()??
  31. ????????{??
  32. ????????????Console.WriteLine("Break?Point?in?Method3");??//?Breakpoint??
  33. ????????}??
  34. ????}??
執行程序將停在第一個斷點處。下圖給出了斷點列表。
debug11_small.png
圖: 斷點列表
上圖中Labels列都為空。下面介紹如何給斷點設置標簽(label)以及如何使用標簽。只需在特定代碼行的斷點符號上右擊(①)或者在斷點窗口中設置(②)即可對任何斷點設置標簽。
debug12_small
圖: 設置斷點標簽(Setting Breakpoint Label)
右擊斷點,點擊編輯標簽(Edit Labels),即可對任意斷點添加標簽。對于示例代碼,我為所有斷點的標簽起了易于理解的名字。
debug13
圖: 添加斷點標簽(Adding Breakpoint Label)
這些標簽如何輔助我們調試呢?現在,所有斷點都是使能的(enabled)。如果你不想調試method2,一般情況下你必須去對應的方法中一個一個的取消斷點,但這里你可以通過標簽名過濾或者搜索它們,然后選中它們以方便的取消它們。
debug14_small
圖: 使用標簽過濾斷點(Filter Breakpoint Using Labels)
斷點標簽到此介紹完畢。我舉的例子非常簡單,但是斷點標簽在你調試大量代碼,多個工程等情況下非常有用。

3.3 條件斷點(Conditional Breakpoint)

假設你在多次迭代(循環)處理數據而你只想調試其中某幾次迭代。這意味著你想根據某些特定條件暫停你的程序。Visual Studio斷點允許你設置條件斷點。當且僅當條件滿足時,調試器才會停住。
首先,你需要在你想暫停執行處設置斷點。然后右擊紅色的斷點圖標。右鍵菜單中點擊”條件“。
debug5_small
圖: 設置斷點條件(Set Breakpoint Condition)
點擊右鍵菜單中的”條件“后,會彈出下面的對話框設置斷點的條件。
debug6
圖: 斷點條件設置
假設你要調試下面的代碼塊:
[csharp]?view plain?copy
  1. class?Program??
  2. ????{??
  3. ????????static?void?Main(string[]?args)??
  4. ????????{??
  5. ?????????string?[]?strNames?=?{?"Name1","Name2",?"Name3",?"Name4",?"Name5",?"Name6"};??
  6. ??
  7. ????????????foreach(string?name?in?strNames)??
  8. ????????????{??
  9. ?????????????????Console.WriteLine(name);?//?Breakpoint?is?here??
  10. ????????????}??
  11. ????????}??
  12. ????}??
你在Console.WriteLine()語句處設置了斷點。當執行程序時,每次for-each循環都會停住。如果你想讓代碼只在name="Name3"時停住,該怎么辦呢?非常簡單,你只需使用條件name.Equals("Name3")。
debug7
圖: 設置斷點條件
查看斷點符號。它應該看上去像是一個加(+)號在斷點符號內部,這表示該斷點是條件斷點。
debug9
圖: 條件斷點符號(Conditional Breakpoint Symbol)
設置斷點的條件之后,在調試程序,調試器只會在滿足給定條件時才停住。
debug10
圖: 條件斷點命中(Conditional Breakpoint hit)
條件輸入框的自動補全(intellisense):上面給出的斷點條件非常簡單,可以非常容易的寫到條件文本框中。有時你可能需要定義很大很復雜的條件。不必擔心,VS為條件文本輸入框也提供了自動補全功能。因此,在條件框中輸入就像是在編輯器中一樣方便。如下圖。
debug8_small
圖: 條件文本框的自動補全(intellisense in condition textbox)
我幾乎講解了條件斷點的所有內容。除了下面這點。在條件窗口中有兩個選項:
  1. Is True
  2. Has Changed
我們已經看到”Is True“選項的用途了。”Has Changed“用在當你想在某些值變為某些特定值的時候停住。

3.4 導入/導出斷點(Import / Export Breakpoint)

3.5 斷點命中計數(Breakpoint Hit Count)

3.6 Breakpoint When Hit

3.7 斷點篩選器(Breakpoint Filter)

你可以限制斷點只對特定進程或線程有效。這在進行多線程程序的調試時非常有用。右擊斷點選”篩選器“即可打開篩選器窗口。
debug40
圖: 斷點篩選器(Breakpoint Filter)
在篩選規則中,你可以設置進程名,進程Id,機器名,線程ID等。我會在多線程調試小節中詳述其用法。

4 數據便簽(Data Tip)

數據便簽是應用程序調試期間用于查看對象和變量的一種高級便簽消息。當調試器執行到斷點時,將鼠標移到對象或者變量上方時,你會看到它們的當前值。你甚至可以看到一些復雜對象(如dataset,datatable等等)的細節。數據便簽左上角有一個“+”號用于展開它的子對象或者值。
debug20
圖: 調試時的數據便簽(DataTips During Debugging)
幾個月前,我發過一篇關于VS 2010 DataTip Debugging Tips的文章。
下面是一些在調試時有用的特性。

4.1 Pin Inspect Value During Debugging

4.2 Drag-Drop Pin Data Tip

4.3 Adding Comments

4.4 Last Session Debugging Value

4.5 Import Export Data Tips

4.6 Change Value Using Data Tips

4.7 Clear Data Tips

5 監視窗口(Watch Windows)

5.1 局部變量(Locals)

列出當前方法中的所有變量。當調試器停在某特定斷點并打開Autos窗口時,將展示當前范圍中與此值相關的變量。
debug30_small
圖:Local Variables

5.2 自動窗口(Autos)

這些變量由VS調試器在調試的時候自動檢測。VS檢測與當前語句相關的對象或變量,基于此列出Autos變量。Autos Variable的快捷鍵是Ctrl + D + A。
debug31_small
圖:Autos - Ctrl + D, A

5.3 監視(Watch)

Watch窗口用于添加變量。你可以添加任意多個變量。添加方法是,右擊變量并選擇“Add to Watch”。
debug32_small
圖:Watch - Ctrl + D, W
也可以使用拖放(Drag and Drop)將變量添加到監視窗口中。從監視窗口中刪除變量的方法是,右擊變量并選擇“Delete Watch”。通過調試窗口,也可以在運行時編輯這些變量值。

有4個可同時使用的監視窗口。
debug33_small
圖:多個監視窗口

若果變量中含有對象實例,左邊會有一個“+”號用于查看對象的屬性和成員。
debug34_small
圖:展開監視變量

5.3.1 Creating Object ID

Visual Studio調試器提供另外一個強大的功能,支持我們為對象的任何一個特定實例創建一個對象ID(object ID)。這可以用于在任何時間監控任意對象,甚至是該對象位于范圍(scope)之外。在監視窗口(watch window)右擊特定對象變量,再單擊“Make Object ID”即可創建Object ID。
debug35_small
圖: 創建Object ID
在對特定對象變量創建Object ID之后,Visual Studio會給這個對象添加一個數碼和“#”號,用來表示。
debug36_small
圖:添加Object ID后

5.4?

6 即時窗口(Immediate Window)

即時窗口是開發人員常用的功能。它可以在不改變當前調試步驟的情況下修改變量值或者執行一些語句。我們可以通過菜單調試 > 窗口 > 即時(Debug > Window > Immediate Window)打開即時窗口。即時窗口支持一組命令,可在調試的任何時刻執行。它也支持Intellisense。在調試期間,我們可以在即時窗口中執行任何命令或者代碼語句。
debug37
圖:基本即時窗口(Basic Immediate Window)
這是對所有開發人員來說最為常用的特性,因此我就不一一介紹即時窗口的每一條命令了。

7 調用堆棧(Call Stack)

8 調試多線程程序(Debugging Multithreaded Program)

8.1 Exploring Threads Window

8.2 Flag Just My Code

8.3 Break Point Filter - Multithread Debugging

9 調試并行程序(Debugging Parallel Program)

9.1 Parallel Task and Parallel Stacks

10 Debugging with IntelliTrace

10.1 Overview

10.2 Mapping with IntelliTrace

10.3 Filter IntelliTrace Data

11 調試常用快捷鍵(Useful Shortcut Keys For VS Debugging)

Shortcut Keys Descriptions
Ctrl-Alt-V, A Displays the Auto window
Ctrl-Alt-B Displays the Breakpoints dialog
Ctrl-Alt-C Displays the Call Stack
Ctrl-Shift-F9 Clears all of the breakpoints in the project
Ctrl-F9 Enables or disables the breakpoint on the current line of code
Ctrl-Alt-E Displays the Exceptions dialog
Ctrl-Alt-I Displays the Immediate window
Ctrl-Alt-V, L Displays the Locals window
Ctrl-Alt-Q Displays the Quick Watch dialog
Ctrl-Shift-F5 Terminates the current debugging session, rebuilds if necessary, and starts a new debugging session.
Ctrl-F10 Starts or resumes execution of your code and then halts execution when it reaches the selected statement.
Ctrl-Shift-F10 Sets the execution point to the line of code you choose
Alt-NUM * Highlights the next statement
F5 If not currently debugging, this runs the startup project or projects and attaches the debugger.
Ctrl-F5 Runs the code without invoking the debugger
F11 Step Into
Shift-F11 Executes the remaining lines out from procedure
F10 Executes the next line of code but does not step into any function calls
Shift-F5 Available in break and run modes, this terminates the debugging session
Ctrl-Alt-H Displays the Threads window to view all of the threads for the current process
F9 Sets or removes a breakpoint at the current line
Ctrl-Alt-W, 1 Displays the Watch 1 window to view the values of variables or watch expressions
Ctrl-Alt-P Displays the Processes dialog, which allows you to attach or detach the debugger to one or more running processes
Ctrl-D,V IntelliTrace Event
到此本文結束。希望你喜歡本文。請分享你的反饋和建議。

12 深入學習(Further Study)

  • Debugging Task-Based Parallel Applications in Visual Studio 2010 By Daniel Moth and Stephen Toub
  • Debugging With IntelliTrace

13 總結(Summary)

本文介紹了調試過程的基本內容。介紹了如何使用VS調試一個應用程序。我解釋了幾乎所有重要的工具以及它們的使用方法。對于并行程序調試,我只講了基礎部分。在深入學習小節中,深入講解了并行調試過程。如果你感興趣,請閱讀。我的主要目的是涵蓋Visual Studio中提供的幾乎所有調試工具。希望你從本文中學到了一些新知識。

“自動窗口”(Autos):當前使用的變量

“局部窗口”(Locals):在范圍內的所有變量

“監視N”(Watch):可定制(N從1到4)


Step Into(逐語句):執行并移動到下一條語句(實際上,跳入上一條語句的代碼塊,此代碼塊的第一條)

Step Over(逐過程):執行并跳到下一條語句,但不進入上一條語句的代碼塊

Step Out(跳出):執行到代碼塊結尾


命令窗口(Command)

即時窗口(Immediate):主要用于計算表達式

參考資料:

[1]?Mastering Debugging in Visual Studio 2010 - A Beginner's Guide

[2]?bug和缺陷的區別

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458711.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

151031

create or replace procedure pr_test1 is v_case number(3): 100; beginif 2>1 thendbms_output.put_line(成立);elsif 4>3 thenif 7>6 thendbms_output.put_line(不成立);end if; elsif 6>5 thendbms_output.put_line(也行);elsedbms_output.put_line(也不成立);…

postgresql9.5 run 文件linux安裝后配置成開機服務

網上出現的比較多安裝方法要么是源碼安裝&#xff0c;要么是yum安裝&#xff0c;我發覺都要配置很多屬性&#xff0c;比較麻煩&#xff0c;所以現在我在centos7長用 run文件來安裝 http://get.enterprisedb.com/postgresql/postgresql-9.5.1-1-linux-x64.run 這里的安裝shell整…

Windows API GetProcAddress 及demo code

GetProcAddress函數檢索指定的動態鏈接庫(DLL)中的輸出庫函數地址。 函數原型&#xff1a; FARPROC GetProcAddress( HMODULE hModule, // DLL模塊句柄 LPCSTR lpProcName// 函數名 ); 參數&#xff1a; hModule [in] 包含此函數的DLL模塊的句柄。LoadLibrary、AfxLoadLibrary …

【操作系統】進程管理

進程管理 進程的基本概念 程序的順序執行及其特征 程序的順序執行:僅當前一操作(程序段)執行完后&#xff0c;才能執行后續操作。 程序順序執行時的特征&#xff1a;順序性&#xff0c;封閉性&#xff0c;可再見性。 前趨圖 前趨圖(Precedence Graph)是一個有向無循環圖&#…

va_list va_start va_end的使用

<pre name"code" class"cpp" style"color: rgb(51, 51, 51); white-space: pre-wrap; word-wrap: break-word;"><strong>一、 從printf()開始</strong> 從大家都很熟悉的格式化字符串函數開始介紹可變參數函數。 原型&#xf…

Linux學習之CentOS(三)----將Cent0S 7的網卡名稱eno16777736改為eth0

【正文】 Linux系統版本&#xff1a;CentOS_7&#xff08;64位&#xff09; 一、前言&#xff1a; 今天又從Centos 6.5裝回了Centos 7&#xff0c;畢竟還是要順應潮流嘛。安裝完成之后&#xff0c;發現發現CentOS 7默認的網卡名稱是eno16777736&#xff0c;如圖所示&#xff1a…

本地音頻播放,使用AVFoundation.framework中的AVAudioPlayer來實現

本地音頻播放,使用AVfoundation.framework中的AVAudioPlayer來實現 /*AVAudioPlayer的使用比較簡單: 1、初始化AVAudioPlayer對象&#xff0c;此時通常指定本地文件路徑 2、設置播放器屬性&#xff0c;例如重復次數、音量大小等 3、調用play方法播放。 */

AngularJS操作DOM——angular.element

addClass()-為每個匹配的元素添加指定的樣式類名after()-在匹配元素集合中的每個元素后面插入參數所指定的內容&#xff0c;作為其兄弟節點append()-在每個匹配元素里面的末尾處插入參數內容attr() - 獲取匹配的元素集合中的第一個元素的屬性的值bind() - 為一個元素綁定一個事…

C++中operator的主要用法

1&#xff0e; operator 用于類型轉換函數&#xff1a; 類型轉換函數的特征&#xff1a; 1&#xff09; 型轉換函數定義在源類中&#xff1b; 2&#xff09; 須由 operator 修飾&#xff0c;函數名稱是目標類型名或目標類名&#xff1b; 3&#xff09; 函數沒有參數&#x…

聲紋識別

一、 聲紋識別是一項根據語音波形中反映說話人生理和行為特征的語音參數&#xff0c;自動識別說話人身份的技術。與語音識別不同的是&#xff0c;聲紋識別利用的是語音信號中的說話人身份信息&#xff0c;而不考慮語音中的字詞意思。由于每個人的生物特征具有與其他人不同的唯一…

Asp.net mvc 實時生成縮率圖到硬盤

之前對于縮率圖的處理是在圖片上傳到服務器之后&#xff0c;同步生成兩張不同尺寸的縮率供前端調用&#xff0c;剛開始還能滿足需求&#xff0c;慢慢的隨著前端展示的多樣化&#xff0c;縮率圖已不能前端展示的需求&#xff0c;所以考慮做一個實時生成圖片縮率圖服務。 每次調用…

數據庫事務的隔離機制

數據庫事務(Database Transaction) &#xff0c;是指作為單個邏輯工作單元執行的一系列操作&#xff0c;要么完全地執行&#xff0c;要么完全地不執行。----百度百科就是說你定義一組數據庫操作&#xff0c;然后告訴數據庫說這些操作要么都成功&#xff0c;要么都不成功。類似于…

如何使用CppUnit進行單元測試

http://www.vckbase.com/document/viewdoc/?id1762 一、前言 測試驅動開發(TDD)是以測試作為開發過程的中心&#xff0c;它堅持&#xff0c;在編寫實際代碼之前&#xff0c;先寫好基于產品代碼的測試代碼。開發過程的目標就是首先使測試能夠通過&#xff0c;然后再優化設計結構…

錄制wav格式的音頻

項目中有面部認證、聲紋認證&#xff0c;服務器端要求上傳wav格式的音頻&#xff0c;所以寫了這樣一個小demo。 剛剛開始寫博客還不知道怎么上傳代碼&#xff0c;就復制了&#xff0c;嘻嘻 DotimeManage.h class DotimeManage; protocol DotimeManageDelegate <NSObject&g…

iOS開發網絡篇—Reachability檢測網絡狀態

前言&#xff1a;當應用程序需要訪問網絡的時候&#xff0c;它首先應該檢查設備的網絡狀態&#xff0c;確認設備的網絡環境及連接情況&#xff0c;并針對這些情況提醒用戶做出相應的處理。最好能監聽設備的網絡狀態的改變&#xff0c;當設備網絡狀態連接、斷開時&#xff0c;程…

網絡七層協議 五層模型 TCP連接 HTTP連接 socket套接字

socket&#xff08;套接字&#xff09;是通信的基石&#xff0c;是支持TCP/IP協議的網絡通信的基本操作單元&#xff0c;包含進行網絡通信必須的五種信息&#xff1a;連接使用的協議&#xff0c;本地主機的IP地址&#xff0c;本地進程的協議端口&#xff0c;遠地主機的IP地址&a…

[vs2010 project] CppUnit快速入門

簡介 測試是軟件開發過程中極其重要的一環&#xff0c;詳盡周密的測試能夠減少軟件BUG&#xff0c;提高軟件品質。測試包括單元測試、系統測試等。其中單元測試是指針對軟件功能單元所作的測試&#xff0c;這里的功能單元可以是一個類的屬性或者方法&#xff0c;測試的目的是看…

[javascript|基本概念|Number]學習筆記

Number類型的值&#xff1a;整數/浮點數值 整數 十進制 e.g.: var intNum 50; 八進制 (嚴格模式下無效,解析錯誤)字面值首位必須是0,之后的數字序列為0&#xff5e;7 e.g.: var intNum 070; //解析為十進制56 (如果字面值數值超出了范圍&#xff0c;前導0將被忽略&#xf…

[轉]深入理解linux內核list_head

http://blog.chinaunix.net/uid-27122224-id-3277511.html 深入理解linux內核list_head的實現 2012-07-17 17:37:01 分類&#xff1a; LINUX 前言&#xff1a;在linux源代碼中有個頭文件為list.h。很多linux下的源代碼都會使用這個頭文件&#xff0c;它里面定義 了一個結構,以及…

xcode左側不顯示工程文件目錄,提示NO Filter Results

解決辦法&#xff1a; What solved was to go to Navigate > Reveal in Project Navigator . After this, the structure appeared again.