最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

12個Visual Studio調(diào)試效率技巧(小結(jié))

 更新時間:2020年07月08日 09:42:11   作者:芝麻麻雀  
這篇文章主要介紹了12個Visual Studio調(diào)試效率技巧,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在這篇文章中,我們假定讀者了解 VS 基本的調(diào)試知識,如:

F5 開始使用調(diào)試器運(yùn)行程序
F9 在當(dāng)前行設(shè)置斷點
F10 運(yùn)行到下一個斷點處
F5 從被調(diào)試的已停止程序恢復(fù)執(zhí)行
F11 步進(jìn)到函數(shù)內(nèi)(如果當(dāng)前程序指針指向一個函數(shù))
F10 步過函數(shù)(如果當(dāng)前程序指針指向一個函數(shù))
Shift+F11 步出執(zhí)行的函數(shù)
暫停執(zhí)行
附加到進(jìn)程
鼠標(biāo)懸停時快速查看源代碼中的元素
調(diào)試窗口:局部變量、監(jiān)視、即時窗口、模塊、調(diào)用堆棧、異常設(shè)置

許多開發(fā)人員使用這個功能強(qiáng)大的工具包來處理調(diào)試會話。然而, Visual Studio 調(diào)試工具提供了更多的功能。下面是一系列Visual Studio調(diào)試效率技巧。注意,這些提示和快捷方式已經(jīng)在的Visual studio 2019 16.6 EN-US版本中進(jìn)行了驗證,驗證時 Visual studio 沒有安裝擴(kuò)展。

1、運(yùn)行到光標(biāo)位置

使用快捷鍵 Ctrl+F10 ,您可以讓調(diào)試器運(yùn)行到光標(biāo)所在行位置。

2、通過點擊鼠標(biāo),運(yùn)行到當(dāng)前位置

在調(diào)試運(yùn)行的程序時,通過鼠標(biāo)懸停在當(dāng)前行的代碼上時,出現(xiàn)綠色的符號,可以點擊此符號,直接讓斷點運(yùn)行到此處。

 

3、在此處作為下一條要執(zhí)行的語句

在調(diào)試運(yùn)行的程序時,通過鼠標(biāo)懸停在當(dāng)前行的代碼上時,通過按住 Ctrl 鍵轉(zhuǎn)換為將此處作為下一條要執(zhí)行的語句。它與通過綠色箭頭符號運(yùn)行到這里不同,此功能將會跳過中間的語句,直接將斷點跳轉(zhuǎn)到此處。因此,在下面的動圖中,我們可以在監(jiān)視窗口中引用obj仍然為null,中間的 MyClass 構(gòu)造函數(shù)并沒有被執(zhí)行。

 

4、數(shù)據(jù)斷點:當(dāng)值發(fā)生變化時,觸發(fā)中斷(值更改時中斷)

當(dāng)你設(shè)置一個非靜態(tài)的設(shè)置器為斷點時,當(dāng)所有對象的屬性的值發(fā)生更改時觸發(fā)斷點。通過局部窗口(監(jiān)視器窗口)右鍵點擊: 值更改時中斷 菜單,單個對象也可以獲得相同的行為。

下面的動畫說明了這個功能,只有當(dāng) obj2.Prop 發(fā)生變化時,命中斷點,而 obj1.Prop 發(fā)生變化時沒有命中斷點。

注意:數(shù)據(jù)斷點綁定到活動對象時,旨在調(diào)試期間起作用。因此,一旦調(diào)試過程停止,設(shè)置的斷點就會丟失,在以后的調(diào)試過程中不能重用它。

5、條件斷點

可以將條件附加到斷點中,以便盡在特定場景中觸發(fā)中斷。在下面的動圖中,我們在循環(huán)中定義條件 i>6 的斷點。然后點擊 繼續(xù) ,可以看到一旦斷點停止, i 的值實際上變成了 7 。

6、跟蹤斷點

在遇到斷點時,停止程序執(zhí)行時最常見的操作。但是,你可以選擇在輸出窗口中不終止(或帶終止)打印一些跟蹤信息。下面的動圖說明了這種可能性。我們在輸出窗口中跟蹤i從0到9的值。注意:跟蹤斷點在編輯器的斷點顯示位置顯示為菱形形狀。

注意,條件和跟蹤操作都可以在斷點上指定。

 

7、跟蹤超出作用域的對象

在監(jiān)視窗口中,通過當(dāng)前執(zhí)行范文內(nèi)引用的名稱來跟蹤對象。但是,當(dāng)這樣的跟蹤引用超出作用域時,即使在引用對象仍處于活動狀態(tài)時,它在監(jiān)視窗口的上下文也不安的毫無意義并且被禁用。

在許多情況下,我們想繼續(xù)跟蹤作用域外對象的狀態(tài)。為此,請在監(jiān)視窗口中右鍵單擊此類引用,單擊菜單 [Make Object ID] 創(chuàng)建對象ID(M) ,并要在監(jiān)視器中添加$1(或者$2,$3,...,取決于你已經(jīng)創(chuàng)建了多個對象ID)。

下面的動圖演示了如何跟蹤作用域外對象的屬性獲取器的狀態(tài),該屬性獲取器以字符串的形式返回實際的日期時間。它很好地顯示了當(dāng)引用 objFct() 上下文中超出作用域時,要觀看的 obj 項將被禁用,而 $1 仍然會獲得更新。

 

8、查看函數(shù)返回的值

函數(shù)返回的值有時在源代碼中被忽略,或者有時這個值在調(diào)試時無法被顯示的訪問。

這樣的返回值可以顯示在 調(diào)試->窗口->自動窗口 中。偽變量 $ReturnValue 也可以在即時窗口和監(jiān)視窗口中使用,以方便查看最后一個函數(shù)調(diào)用的返回值。

注意,菜單 調(diào)試->窗口->自動窗口 僅在 Visual Studio 調(diào)試器附加到進(jìn)程并且程序被調(diào)試器暫停時可用。

9、重新附加到進(jìn)程

Visual Studio 2017 開始,重新附加到進(jìn)程 Shift+Alt+P 工具被提出,并且非常方便。將調(diào)試器附加到某個進(jìn)程后, Visual Studio 會記住它,并建議將調(diào)試器重新附加到同一進(jìn)程。斜體也一樣,因為這里有一個關(guān)于進(jìn)程標(biāo)識的啟發(fā)式方法:

  • 如果已附加的進(jìn)程仍然運(yùn)行著,重新附加到進(jìn)程,重新附加到它。
  • 否則,Visual Studio將嘗試查找和前一個進(jìn)程名具有相同名稱的單進(jìn)程,并將調(diào)試器重新附加到該進(jìn)程。
  • 如果找到幾個使用此名稱的進(jìn)程,則打開“附加到進(jìn)程”對話框,只顯示名稱相同的進(jìn)程
  • 如果找不到具有此名稱的進(jìn)程,則顯示“附加到進(jìn)程”對話框

重新附加到進(jìn)程也適用于涉及多個進(jìn)程的調(diào)試會話。在這種情況下, Visual Studio 會嘗試使用上述相同的啟發(fā)式方法來查找它附加到的所有進(jìn)程。

10、在即時窗口和在觀察窗口的 No-Side-Effect 評估

有時,在即時窗口或監(jiān)視窗口中評估表達(dá)式時,某些狀態(tài)會更改。這種行為通常時不希望發(fā)生的。你不想僅僅因為需要評估表達(dá)式的值而破壞調(diào)試程序的狀態(tài)。這種情況被稱為 Heisenbug ,該術(shù)語時物理學(xué)家 Werner Heisenberg 的雙關(guān)語,它首先斷言了量子力學(xué)的觀察者效應(yīng),該現(xiàn)象指出,觀察系統(tǒng)的行為不可避免的會改變器狀態(tài)。

為了避免更改任何狀態(tài),你可以在表達(dá)式后面加上 nse (No-Side-Effect)。下面的動圖說明了這種可能性(在監(jiān)視窗口中監(jiān)視 State 的值是否有變化)。

下面這種動圖是 nse 在監(jiān)視窗口的使用。由于 SideEffectFct() 所觀察的項中有 Refresh 評估按鈕,所以此示例比前一個示例更簡單。

11、在源碼中顯示線程

調(diào)試多線程應(yīng)用程序是有名的復(fù)雜。希望 在源碼中顯示線程 按鈕能提供很大的幫助。它在編輯器的左側(cè)邊欄引入標(biāo)記圖標(biāo),以跟蹤其他線程被暫停的位置。這個標(biāo)記可以用來顯示線程 ID ,并最終切換到另一個線程。注意:如果至少兩個線程在同一位置暫停,則會顯示不同的標(biāo)記符號。

更多調(diào)試多線程應(yīng)用程序的技巧可以在這個微軟文檔中找到: Get started debugging multithreaded applications (C#, Visual Basic, C++)

https://docs.microsoft.com/en-us/visualstudio/debugger/get-started-debugging-multithreaded-apps?view=vs-2019

下面是這個演示的源代碼,如果你想演示它,可以進(jìn)行參考:

using System;
using System.Threading;
 
class Program {
  static void Main() {
   for (int i=0; i< 5; i++) {
     // Avoid capturing a loop variable in the lambda below
     int j = i;
     // So 2 thread are blocked on '0' case
     if (j == 1) { j = 0; } 
     ThreadPool.QueueUserWorkItem(delegate { Method(j); });
   }
   Thread.Sleep(60000);
  }
  static void Method(int id) {
   switch(id) {
     case 0:
      Thread.Sleep(60000); break;
     case 1:
      Thread.Sleep(60000); break;
     case 2:
      Thread.Sleep(60000); break;
     case 3:
      Thread.Sleep(60000); break;
     case 4:
      Thread.Sleep(60000); break;
   }
  }
}

12、從反編譯的IL代碼中調(diào)試源代碼

我們經(jīng)常依賴一些黑盒組件:我們沒有源代碼的組件。

但是,在調(diào)試復(fù)雜行為時,觀察甚至調(diào)試引用的黑盒組件引用的邏輯。這就是為什么從16.5版本開始, Visual Studio 2019 可以從編譯好的程序中生成一些源代碼。這樣的源代碼是可以調(diào)試的。這個特性是基于開源軟件(OSS)工程:ILSpy( https://github.com/icsharpcode/ILSpy )。

反編譯菜單可以在模塊窗口的組件右鍵菜單(如下面的動圖所示)和 Source Not FoundNo Symbols Loaded 對話框中給出。

IL 代碼反編譯為源代碼不可能是完美的,因為一些源代碼信息在編譯時丟失了。因此,這個特性有一些限制,在這個官方文檔的最后會解釋: Generate source code from .NET assemblies while debugging

https://docs.microsoft.com/en-us/visualstudio/debugger/decompilation?view=vs-2019

結(jié)尾

Visual Studio非常出色,在調(diào)試方面尤其出色。 在這里,我試圖選擇一些既隱藏又經(jīng)常有用的技巧,希望它們能幫助您提高生產(chǎn)率。

到此這篇關(guān)于12個Visual Studio調(diào)試效率技巧(小結(jié))的文章就介紹到這了,更多相關(guān)VisualStudio調(diào)試技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Git操作規(guī)范之tag的使用技巧詳解

    Git操作規(guī)范之tag的使用技巧詳解

    這篇文章主要為大家介紹了Git操作規(guī)范之tag的使用技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Postman如何導(dǎo)出接口的幾種方法

    Postman如何導(dǎo)出接口的幾種方法

    本文主要介紹了Postman如何導(dǎo)出接口的幾種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 在github上怎樣修改語言設(shè)置

    在github上怎樣修改語言設(shè)置

    這篇文章主要介紹了在github上怎樣修改語言設(shè)置問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • IDEA Git Stash 使用詳解

    IDEA Git Stash 使用詳解

    這篇文章主要介紹了IDEA Git Stash 使用詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 兩分鐘學(xué)會如何在github托管代碼

    兩分鐘學(xué)會如何在github托管代碼

    這篇文章主要介紹了兩分鐘學(xué)會如何在github托管代碼,本篇內(nèi)容針對不會Git的小童鞋,大神們可以繞過,錯誤之處謝謝指正
    2014-10-10
  • 12種最常用的網(wǎng)頁編程語言簡介(值得收藏)

    12種最常用的網(wǎng)頁編程語言簡介(值得收藏)

    隨著網(wǎng)站的越來越普及,與Web相關(guān)的開發(fā)技術(shù)持續(xù)熱門,從開始簡單的html到復(fù)雜的web開發(fā)語言asp、asp.net、php、jsp等等,在此,我就借助SEO馬龍博客的平臺跟大家簡單的介紹一下常見的12種網(wǎng)頁編程語言
    2017-01-01
  • Sublime Text3快捷鍵匯總

    Sublime Text3快捷鍵匯總

    這篇文章主要介紹了Sublime Text3快捷鍵匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • HTML5 拖拽復(fù)制功能的實現(xiàn)

    HTML5 拖拽復(fù)制功能的實現(xiàn)

    這篇文章主要介紹了HTML5 拖拽復(fù)制功能的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • windows 中 \r\n 區(qū)別于 類unix中的\n 疑問理解(crlf回車換行)

    windows 中 \r\n 區(qū)別于 類unix中的\n 疑問理解(crlf回車換行)

    windows 中 \r\n 區(qū)別于 類unix中的\n 疑問 迎刃而解,需要的朋友可以參考下。
    2011-08-08
  • 提高代碼可讀性的十大注釋技巧分享

    提高代碼可讀性的十大注釋技巧分享

    這篇文章主要介紹了提高代碼可讀性的十大注釋技巧,詳細(xì)分析了編程開發(fā)中常用的代碼注釋方法,需要的朋友可以參考下
    2016-03-03

最新評論

辽阳市| 绵竹市| 台北市| 襄垣县| 北票市| 会同县| 集安市| 囊谦县| 柘城县| 南投市| 方城县| 吴旗县| 都兰县| 尼勒克县| 昭平县| 军事| 南平市| 勐海县| 江北区| 济源市| 定南县| 北宁市| 汽车| 大英县| 南充市| 桑植县| 甘洛县| 舟曲县| 永和县| 沁水县| 磴口县| 丹棱县| 兴化市| 宜昌市| 怀安县| 静海县| 塔河县| 中超| 沁阳市| 荃湾区| 营口市|