Visual Studio Debugger七個(gè)鮮為人知的小功能
Visual Studio debugger是一個(gè)很棒的調(diào)試工具,可以幫助程序猿們快速地發(fā)現(xiàn)和解決問(wèn)題。這里給大家簡(jiǎn)單介紹一下VS調(diào)試工具中的七個(gè)鮮為人知的小功能。
1. 一鍵跳轉(zhuǎn)到指定語(yǔ)句
調(diào)試過(guò)程中經(jīng)常需要拖拽黃箭頭,使特定語(yǔ)句執(zhí)行或者不執(zhí)行。常規(guī)方法就是使用鼠標(biāo)直接拖拽。
在Visual Studio 2017 15.3預(yù)覽版中,有一個(gè)更簡(jiǎn)單地跳轉(zhuǎn)到目標(biāo)行的方法:在目標(biāo)行盤旋鼠標(biāo)指針,出現(xiàn)綠色豎線右箭頭圖標(biāo)后,按住CTRL后鼠標(biāo)左鍵點(diǎn)擊,就把調(diào)試黃箭頭移過(guò)去了,再點(diǎn)擊調(diào)試下一步或者F5就直接在指定行運(yùn)行了。
2. 添加指定實(shí)例值的斷點(diǎn)
有時(shí)候某個(gè)實(shí)例的屬性值會(huì)莫名其妙的變化,當(dāng)我們需要知道為什么變化的時(shí)候,會(huì)在屬性代碼中添加斷點(diǎn),但是這會(huì)對(duì)所有實(shí)例都生效。
在調(diào)試的時(shí)候,可以使用Make Object ID和Conditional Breakpoint功能去添加指定實(shí)例的斷點(diǎn),具體如下:
首先我定義了一個(gè)類,并初始化了兩個(gè)對(duì)象,更改PointX的值,想要添加實(shí)例a的PointX值的改變斷點(diǎn)
在調(diào)試過(guò)程中,右擊實(shí)例a選擇Make Object ID
這時(shí)實(shí)例a被賦值到$1中,在要添加的斷點(diǎn)出右擊選擇Conditions…
添加$1 == this代碼后,再運(yùn)行程序,則在實(shí)例a屬性改變的時(shí)候斷點(diǎn)生效,實(shí)例b屬性改變的時(shí)候不生效了。
注意Make Object ID記錄的是內(nèi)存中對(duì)象的地址,下次調(diào)試的時(shí)候就改變了,需要重新設(shè)置。
3. 重新附加進(jìn)程
Attach to Process是大家經(jīng)常需要用的功能,Visual Studio 2017中有一個(gè)新的選項(xiàng)叫做Reattach to Process,可以方便大家重新附加到最近一次附加到的進(jìn)程上。
先附加到一個(gè)進(jìn)程上,點(diǎn)擊Stop Debugging,然后再點(diǎn)擊Debug就能看到里面的Reattach to Process選項(xiàng)了。
4. 顯示所有的線程
在調(diào)試過(guò)程中,調(diào)試工具欄中有一個(gè)新的選項(xiàng)叫做:Show Threads in Source。點(diǎn)擊后即可在有線程停止的代碼行前顯示一個(gè)圖標(biāo),鼠標(biāo)停留在圖標(biāo)上顯示線程,右擊圖標(biāo)可以顯示可用操作。
注意這個(gè)功能可能影響調(diào)試效率,如果不需要的話建議默認(rèn)關(guān)閉。
5. 臨時(shí)禁用指定斷點(diǎn)
當(dāng)進(jìn)行多線程調(diào)試的時(shí)候,可以利用Disable Breakpoint功能臨時(shí)禁用指定斷點(diǎn),防止其它線程由于斷點(diǎn)中斷,影響當(dāng)前線程的調(diào)試工作。
6. 查看所有線程的調(diào)用棧
調(diào)試過(guò)程中,在Command Window中輸入”Debug.ListCallStack -AllThreads”,即可看到所有線程的調(diào)用棧。
也可以用WinDBG命令”~*k”:
7. 使用無(wú)負(fù)面效果的方法評(píng)估
有時(shí)候可能需要在調(diào)試Watch窗口中查看一個(gè)方法的返回值,但是真正執(zhí)行這個(gè)方法的時(shí)候可能會(huì)產(chǎn)生負(fù)面效果,這里可以在Watch窗口輸入的時(shí)候添加”, nse”來(lái)避免負(fù)面效果,是”No Side Effects”的縮寫。例子如下:
剛開始Add執(zhí)行了六次,所以testList總數(shù)是6,
現(xiàn)在想查看Add當(dāng)前執(zhí)行的返回值,可以在Watch窗口輸入Add(1),但是這會(huì)產(chǎn)生負(fù)影響,改變testList的值為7,
因此如果想不影響testList的原始值,則需要加上”, nse”,如下顯示是8,但是testList原始值未變還是7:
介紹到此為止,有你喜歡的調(diào)試小功能么,歡迎來(lái)評(píng)論~
PS:只是介紹,不喜勿噴。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET中在一般處理程序中使用session的簡(jiǎn)單介紹
這篇文章介紹了ASP.NET中在一般處理程序中使用session,有需要的朋友可以參考一下2013-10-10IP地址與整數(shù)之間的轉(zhuǎn)換實(shí)現(xiàn)代碼(asp.net)
把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)32位二進(jìn)制數(shù)。從左到右,每8位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上”?!本褪沁@個(gè)ip地址了2012-09-09Asp.net回調(diào)技術(shù)Callback學(xué)習(xí)筆記
這篇文章主要記錄了Asp.net回調(diào)技術(shù)Callback的一些知識(shí),感興趣的朋友可以參考下2014-08-08WPF項(xiàng)目在設(shè)計(jì)界面調(diào)用后臺(tái)代碼
這篇文章介紹了WPF項(xiàng)目在設(shè)計(jì)界面調(diào)用后臺(tái)代碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04.NetCore利用BlockingCollection實(shí)現(xiàn)簡(jiǎn)易消息隊(duì)列
這篇文章主要介紹了.NetCore利用BlockingCollection實(shí)現(xiàn)簡(jiǎn)易消息隊(duì)列,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09C#/.NET使用git命令行來(lái)操作git倉(cāng)庫(kù)的方法示例
本文介紹使用 C# 編寫一個(gè) .NET 程序來(lái)自動(dòng)化地使用 git 命令行來(lái)操作 git 倉(cāng)庫(kù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04asp.net 需要登陸的網(wǎng)站上下載網(wǎng)頁(yè)源代碼和文件
最近有個(gè)項(xiàng)目需要從網(wǎng)絡(luò)上下載網(wǎng)頁(yè)信息和文件,并且需要登錄后才能下載,所以做了個(gè)下載的通用類,供大家參考。2009-05-05.Net使用RabbitMQ即時(shí)發(fā)消息Demo
RabbitMQ是一個(gè)在AMQP基礎(chǔ)上完整的,可復(fù)用的企業(yè)消息系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于.Net使用RabbitMQ即時(shí)發(fā)消息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07