<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          1小時學會Visual Studio這些 調試技巧 !

          共 3242字,需瀏覽 7分鐘

           ·

          2021-07-10 08:14



          轉自:LightSmaile
          cnblogs.com/LightSmile/p/11055665.html

          寫在前面:假定你在日常的工作中使用到了Visual Studio,并期望了解一些調試技巧來提高工作效率,也許本文適合你。以下Visual Studio簡稱V。


          一、入門


          以最簡單的控制臺應用程序為例,代碼如下:


          class Program
          {
          static void Main(string[] args)
          {
          int result = Sum(2, 3);
          Console.WriteLine("2+3={0}", result);
          }
          private static int Sum(int a,int b)
          {
          return a + b;
          }
          }


          調試的根本目的是跟蹤代碼、程序的狀態(tài),判斷是否按照期望的行為運行。常用的跟蹤手段有控制臺輸出、日志輸出以及斷點調試。


          1、控制臺輸出用于開發(fā)環(huán)境,可以在vs輸出窗口中查看程序輸出的內容如下圖所示:



          由于是控制臺應用程序,Console.WriteLine() 輸出的內容不會顯示在輸出窗口,故采用Trace.WriteLine() 。對非控制臺應用程序,Console.WriteLine() 輸出的內容會正常顯示在輸出窗口。


          2、日志輸出用于開發(fā)環(huán)境和生產環(huán)境,但更多用于生產環(huán)境,用來收集程序的運行信息。常用的日志組件有Log4Net、NLog以及自定義日志組件。依據問題嚴重程度大致分為嚴重錯誤、錯誤、警告、信息以及調試信息等幾個級別??山Y合實際需求靈活配置。


          3、斷點調試多用于開發(fā)環(huán)境,通過設置斷點,讓程序在指定的位置暫停,以便觀察上下文環(huán)境情況。



          以上圖為例,添加斷點后,鼠標移動到變量名上,可以觀察一些變量的值。對于復雜類型的變量,通過選中變量,右鍵選擇快速監(jiān)視的方式。避免鼠標移動后,監(jiān)視的信息消失。



          以上三種調試方法中,對于開發(fā)環(huán)境而言,使用最為頻繁的方法當數(shù)斷點調試。后面以斷點調試為主,深入介紹。


          二、進階


          啟動外部程序


          要使用斷點調試,需要滿足一些斷點調試的條件。對于可執(zhí)行程序,如控制臺應用程序、窗體應用程序、WPF應用程序以及Web應用程序,啟動調試后,可以在期望的位置添加斷點。而對于如動態(tài)庫類型,不可以直接啟動調試。想要調試這類項目,有兩種方式。一種是可以設置項目屬性中的啟動操作,指定引用該動態(tài)庫的可執(zhí)行程序路徑。



          另一種方式是運行調用了動態(tài)庫的可執(zhí)行程序,通過附加可執(zhí)行程序進程的方式來調試。


          附加進程



          新建 DllDemo 動態(tài)庫項目,添加 MyMath 類,添加靜態(tài)方法 Max(int a,int b) 。代碼如下:


          using System;
          namespace DllDemo
          {
          public class MyMath
          {
          public static int Max(int a,int b)
          {
          return Math.Max(a, b);
          }
          }
          }

          添加對 DllDemo 動態(tài)庫項目引用, 并修改控制臺應用程序如下。為了方便后續(xù)調試,控制臺應用程序中添加 Console.Read()。


          using DllDemo;
          using System;
          using System.Diagnostics;
          namespace DebugDemo
          {
          class Program
          {
          static void Main(string[] args)
          {
          Console.WriteLine("等待鍵盤輸入...");
          Console.Read();
          int result = Sum(2, 3);
          Console.WriteLine(string.Format("2+3={0}", result));
          result = MyMath.Max(2, 3);
          Console.WriteLine(string.Format("MyMath.Max(2, 3)={0}", result));
          }
          private static int Sum(int a, int b)
          {
          return a + b;
          }
          }
          }


          運行控制臺應用程序DebugDemo.exe ,附加該進程,在合適的位置添加斷點。



          查看調用堆棧


          當程序包含接口繼承、抽象類繼承等邏輯,導致結構過于復雜,知道功能入口以及出口,想要了解過程時,調用堆棧會比較有用。以下面代碼為例:


          private static void DoWork()
          {
          DoWork1();
          }
          private static void DoWork1()
          {
          DoWork2();
          }
          private static void DoWork2()
          {
          DoWork3();
          }
          private static void DoWork3()
          {
          Console.Write("DoWork3");
          }


          假設知道功能入口為DoWork,功能結果為DoWork3,想要了解DoWork3的調用邏輯,可以在DoWork3中設置斷點,啟動調試后打開調用堆棧窗口,如下圖:



          異常設置


          當程序運行以后,結果不是預期的。初步猜測發(fā)生了異常,由于某些原因,捕獲了異常,卻未妥善處理,導致異常信息被“吞”掉。此時,異常設置會格外有效。以下面代碼為例:

          private static void TryToDivideByZero()
          {
          try
          {
          int a = 9;
          int b = 0;
          int c = a / b;
          }
          catch(Exception ex)
          {
          Console.WriteLine(ex.Message);
          }
          }


          由于方法中存在異常,又有異常捕獲,后續(xù)邏輯會被打斷,此時對異常設置做如下設置:



          重新調試程序會有如下結果,方便快速定位異常發(fā)生點。



          三、高級


          在某些場景下,開發(fā)環(huán)境運行正常,非開發(fā)環(huán)境運行異常,依賴常規(guī)手段無法定位問題原因,想要斷點調試,非開發(fā)環(huán)境運行缺少VS時,遠程調試會比較有效。


          在VS安裝目錄下拷貝遠程調試所需的文件夾x86,x64到非開發(fā)環(huán)境



          依據遠程目標機系統(tǒng)環(huán)境,運行x86/x64文件夾下msvsmon.exe,選擇工具中的選項菜單做如下配置:



          運行待調試程序后,在VS中選擇調試>附加到進程(ctrl+alt+p),設置連接類型,連接目標(遠程ip地址或計算機名)后查找,會自動列出相關內容。



          在可用進程中選擇對應的進程



          在合適的位置添加斷點即可開始調試了








          回復 【關閉】
          回復 【實戰(zhàn)】獲取20套實戰(zhàn)源碼
          回復 【被刪】
          回復 【訪客】
          回復 【小程序】學獲取15套【入門+實戰(zhàn)+賺錢】小程序源碼
          回復 【python】學微獲取全套0基礎Python知識手冊
          回復 【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          回復 【加群】加入dotnet微信交流群


          臥槽,你更新Win11了嘛?


          玩機小技巧,微信免費提現(xiàn)!



          瀏覽 86
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美性爱日逼 | 婷婷综合网 性 | 精品免费视频娱乐亚洲 | AV天堂观看 | 国产精品 久久久精品岩 |