12個Visual Studio調試效率技巧(小結)_相關技巧

來源:腳本之家  責任編輯:小易  

visual studio 2012中文旗艦版下2113載(附有5261詳細的安裝教程)vs2012密鑰序4102列號1653(保證完美激活);YKCW6-BPFPF-BT8C9-7DCTH-QXGWCRBCXF-CVBGR-382MK-DFHJ4-C69G8YQ7PR-QTHDM-HCBCV-9GKGG-TB2TMYKCW6-BPFPF-BT8C9-7DCTH-QXGWCwww.anxorj.tw防采集請勿采集本網。

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

一句話回Visual Studio Community 2013最好。另外,如果你急于開發Windows 10通用應用,可以在Windows 10預覽版下再裝一個Visual Studio 2015預覽版。兩個版本可以并存互不影響。更新:既然

F5 開始使用調試器運行程序

visual studio是集2113成環境(含VC,VF等)的一個軟件 下可以進行5261C/C++/C#/VB/F#語言和一些網絡語言的編4102譯,它所編寫的程序代碼適用于微1653軟支持的所有平臺,它本身也是由微軟公司開發的

F9 在當前行設置斷點

Visual Basic 是 Visual Studio 6.0 開發產品2012年9月12日,微軟在西雅圖發布 Visual Studio 2012。2013年11月13日,微軟發布 Visual Studio 2013。2014年11月,微軟發布 Visual Studio 2015。

F10 運行到下一個斷點處

Visual Studio是微軟公司推出的開發環境,是目前最流行的Windows平臺應用程序開發環境。Visual Studio 2010版本于2010年4月12日上市,其集成開發環境(IDE)的界面被重新設計和組織,變得更加

F5 從被調試的已停止程序恢復執行

2010分Professional,Premium,Ultimate,Test Professional幾個版本。2008分Standard Edition,Professional Edition,另外每個Visual Studio版本都會有個免費的精簡版,Express Edition

F11 步進到函數內(如果當前程序指針指向一個函數)

F10 步過函數(如果當前程序指針指向一個函數)

Shift+F11 步出執行的函數

暫停執行

附加到進程

鼠標懸停時快速查看源代碼中的元素

調試窗口:局部變量、監視、即時窗口、模塊、調用堆棧、異常設置

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

1、運行到光標位置

使用快捷鍵 Ctrl+F10 ,您可以讓調試器運行到光標所在行位置。

2、通過點擊鼠標,運行到當前位置

在調試運行的程序時,通過鼠標懸停在當前行的代碼上時,出現綠色的符號,可以點擊此符號,直接讓斷點運行到此處。

 

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

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

 

4、數據斷點:當值發生變化時,觸發中斷(值更改時中斷)

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

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

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

5、條件斷點

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

6、跟蹤斷點

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

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

 

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

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

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

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

 

8、查看函數返回的值

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

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

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

9、重新附加到進程

Visual Studio 2017 開始,重新附加到進程 Shift+Alt+P 工具被提出,并且非常方便。將調試器附加到某個進程后, Visual Studio 會記住它,并建議將調試器重新附加到同一進程。斜體也一樣,因為這里有一個關于進程標識的啟發式方法: 如果已附加的進程仍然運行著,重新附加到進程,重新附加到它。 否則,Visual Studio將嘗試查找和前一個進程名具有相同名稱的單進程,并將調試器重新附加到該進程。 如果找到幾個使用此名稱的進程,則打開“附加到進程”對話框,只顯示名稱相同的進程 如果找不到具有此名稱的進程,則顯示“附加到進程”對話框

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

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

有時,在即時窗口或監視窗口中評估表達式時,某些狀態會更改。這種行為通常時不希望發生的。你不想僅僅因為需要評估表達式的值而破壞調試程序的狀態。這種情況被稱為 Heisenbug ,該術語時物理學家 Werner Heisenberg 的雙關語,它首先斷言了量子力學的觀察者效應,該現象指出,觀察系統的行為不可避免的會改變器狀態。

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

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

11、在源碼中顯示線程

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

更多調試多線程應用程序的技巧可以在這個微軟文檔中找到: 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

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

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代碼中調試源代碼

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

但是,在調試復雜行為時,觀察甚至調試引用的黑盒組件引用的邏輯。這就是為什么從16.5版本開始, Visual Studio 2019 可以從編譯好的程序中生成一些源代碼。這樣的源代碼是可以調試的。這個特性是基于開源軟件(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

結尾

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

到此這篇關于12個Visual Studio調試效率技巧(小結)的文章就介紹到這了,更多相關VisualStudio調試技巧內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

要是看著不爽就把Visual Studio 卸載了,再重裝一遍內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • 分享visual studio原生開發的10個調試技巧(2)
  • visual studio調試技巧匯總
  • 分享visual studio原生開發的10個調試技巧
  • vscode添加open with code實現右鍵打開文件夾
  • intellij idea卡死,如何優化內存
  • 油猴腳本編寫教程詳解
  • 網絡抓包工具wireshark入門教程詳解
  • 數據類型和json格式分析小結
  • linux/ubuntu git從安裝到使用的方法步驟
  • 漂流瓶推送需求的邏輯實現代碼
  • 手把手教你用hexo+github搭建屬于自己的博客(詳細圖文)
  • azkaban3.81.x部署過程及遇到的坑
  • fiddler抓包小技巧之自動保存抓包數據的實現方法分析【可根據需求
  • C盤中有好幾個Visual Studio 11.0 12.0 14.0,我平時只用C#,請問是否需要刪除
  • visual studio 2012 密鑰
  • visual studio各個版本是不是2010界面最舒服
  • Visual basic express和visual studio這2個軟件有什么區別? 在學校里現在用的是viusal basic 2010 e
  • visual studio 哪個版本最好
  • visual studio到底是干什么用的?
  • visual basic 和 visual studio 又什么區別?
  • visual studio 2010怎么用
  • 介紹下MS Visual Studio各個版本
  • Visual Studio 與Visual C++一樣么
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全javascriptasp.netphp編程ajax相關正則表達式asp編程jsp編程編程10000問css/htmlflex腳本加解密web2.0xml/rss網頁編輯器相關技巧安全相關網頁播放器其它綜合dart首頁分享visual studio原生開發的10個調試技巧(2)visual studio調試技巧匯總分享visual studio原生開發的10個調試技巧vscode添加open with code實現右鍵打開文件夾intellij idea卡死,如何優化內存油猴腳本編寫教程詳解網絡抓包工具wireshark入門教程詳解數據類型和json格式分析小結linux/ubuntu git從安裝到使用的方法步驟漂流瓶推送需求的邏輯實現代碼手把手教你用hexo+github搭建屬于自己的博客(詳細圖文)azkaban3.81.x部署過程及遇到的坑fiddler抓包小技巧之自動保存抓包數據的實現方法分析【可根據需求2019最新的pycharm激活碼(推薦)進制轉換算法原理(二進制 八進制eclipse 格式化代碼時不換行與自微信小程序設置http請求的步驟詳幾款開源的中文分詞系統十進制負數轉換為二進制、八進制從console.log說起(console.log詳url 長度有限制嗎?git 撤銷操作、刪除文件和恢復文徹底解決頁面文字編碼亂碼問題抓包工具fiddler的使用方法詳解(fiddler中php和asp利用shell.application來執行程序分享vscoce遠程連接服務器的一次錯誤記錄git 命令行教程及實例教程(附github注冊)算法系列15天速成 第六天 五大經典查找【微信小程序學習之初探小程序flippingbook使用教程(附下載)一個批量編碼轉換及asp/js加解密/簡繁轉換
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载