亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# 代碼調(diào)試技巧和如何遠(yuǎn)程調(diào)試

 更新時間:2020年11月06日 08:35:30   作者:一線碼農(nóng)  
這篇文章主要介紹了c# 代碼調(diào)試技巧和如何遠(yuǎn)程調(diào)試,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下

一:背景

1. 講故事

每次項目預(yù)交付的時候,總會遇到各種奇葩的坑,我覺得有必要梳理一下以及如何快速解決的,讓后來人避避坑,這篇就聊聊自己的所聞所遇:

我去,本地環(huán)境代碼跑的哧溜,上了測試環(huán)境出問題
我去, 第三方提供的 dll 跑出 bug 了

二:兩個大坑的解決方案

1. 本地環(huán)境沒問題,上了測試出問題

相信很多朋友都有我這樣類似的遭遇,明明程序代碼,配置文件都一樣,挪了一個窩就出問題,你說氣人不,既然問題出了那怎么快速解決呢? 對,就是用調(diào)試,但程序部署在 centos 上,送一個 visualstudio 上去也不現(xiàn)實,在這種限制級條件下還想調(diào)試怎么辦呢?不錯,可以上遠(yuǎn)程調(diào)試,然后就很快查到了測試機器中的某一個環(huán)境變量搞錯了,事情的來龍去脈搞清楚了,接下來就看看怎么實現(xiàn) local 到 centos 的 遠(yuǎn)程調(diào)試。

1) 測試代碼
為了方便演示,我就在 Action 中讀取 strategy 環(huán)境變量。

  public class HomeController : Controller
  {
    public IActionResult Index()
    {
      ViewBag.strategy = Environment.GetEnvironmentVariable("strategy");

      return View();
    }
  }

2) 安裝 SSH
要遠(yuǎn)程調(diào)試,需要在遠(yuǎn)端機安裝 SSH,因為后面附加進程調(diào)試 就要借助 SSH 打通。

yum install openssh-server unzip curl

安裝完成后,就能看到 22 端口已啟動

[root@localhost data]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address     State    PID/Program name  
tcp    0   0 0.0.0.0:22       0.0.0.0:*        LISTEN   1126/sshd      
tcp    0   0 127.0.0.1:631      0.0.0.0:*        LISTEN   3037/cupsd     
tcp    0   0 127.0.0.1:25      0.0.0.0:*        LISTEN   1739/master  
tcp6    0   0 :::22          :::*          LISTEN   1126/sshd      
tcp6    0   0 ::1:631         :::*          LISTEN   3037/cupsd     
tcp6    0   0 ::1:25         :::*          LISTEN   1739/master 

3) 程序的發(fā)布配置
發(fā)布配置上,第一個要確保是 debug 版本,第二個要確保是 可移植模式 (Portable), 如下圖:

4) 使用附加進程調(diào)試
在菜單欄依次選擇:Debug -> Attach To Process,然后填寫 ssh 需要的各種信息,如下圖:

點擊 Connect 后,就能看到遠(yuǎn)端機器的 dotnet程序 進程號,選擇該進程進行附加,在 Select Code Type 中選擇 Nanaged (.NET Core for Unix)即可,如下圖:

5) 順利調(diào)試
在 瀏覽器中鍵入: http://192.168.142.130/Home/Index ,可以看到我的 C# 代碼被命中,也順利的拿到了遠(yuǎn)端機器的 環(huán)境變量,問題也就迎刃而解。

2. 第三方 dll 出 bug 了

調(diào)試程序除了使用 F9 進行調(diào)試,相信也有不少朋友知道斷點是可以編輯的,比如說:設(shè)置表達式斷點,過濾器斷點,命中次數(shù)斷點,動作斷點,下如圖:

第一個問題就來了,這些花式斷點,你真的會用嗎?真的會經(jīng)常用嗎?

讓我來回答的話,不到萬不得已我是不會用的,我更愿意在代碼中加入利于調(diào)試的測試語句,原因有三點:

  • 更加靈活

這個顯而易見,在面板中設(shè)置條件相比用純語句設(shè)置要麻煩得多,點來點去,而且還要條件疊加,復(fù)雜的很,我是不喜歡。

  • 功能強大

編輯面板上只有簡單的并且關(guān)系,而且各個條件還是同級別的,無法做到各個條件的或者關(guān)系以及層級或者遞歸的包含關(guān)系,所以。。。沒辦法。。。

  • 更易于保存

這個就有意思了,在斷點上右鍵是彈出編輯面板,點擊左鍵是關(guān)閉斷點,問題就出在這里,經(jīng)常由于手賤,本想點右鍵結(jié)果點了左鍵 😨😨😨。。。。 好不容易設(shè)置好的條件沒了。。。真的沒了😭😭😭,從此以后,路轉(zhuǎn)黑。如下圖:

那這么說斷點編輯真的沒用嗎? 我覺得只有在不能修改語句的調(diào)試場景下能夠大顯身手,比如我遇到的調(diào)試廠家封裝的dll,哈哈,既然說到了斷點,我就用 dnspy 演示幾個斷點給大家復(fù)習(xí)一下吧!

1) 測試代碼
為方便演示,用 for 循環(huán)案例是最好的。

    public static void Main(string[] args)
    {
      var sum = 0;

      for (int i = 0; i < 10000; i++)
      {
        sum += i;
      }

      Console.WriteLine($"sum={sum}");
    }

2) 我希望在 sum = 1035 的時候命中斷點
這個用條件表達式斷點就可以了,非常簡單,如下所示:

3) 找到所有能夠被 1800 整除的數(shù),并且記錄下當(dāng)時的 i 和 sum 值
這里就可以用到 Action 斷點的日志記錄,在 for 循環(huán)迭代中,不需要中斷斷點,只需記錄某一個特定狀態(tài)下當(dāng)前的 i 和 sum 的值,對調(diào)試代碼非常有幫助,如下圖:

三:總結(jié)
總的來說這兩個經(jīng)驗也算我一步一步踩坑過來的,如果能幫到你就更好了,本篇就聊這么多,下篇再見!

以上就是c# 代碼調(diào)試技巧和如何遠(yuǎn)程調(diào)試的詳細(xì)內(nèi)容,更多關(guān)于c# 代碼調(diào)試的資料請關(guān)注腳本之家其它相關(guān)文章!

  • C#調(diào)用Java代碼的方法介紹

    C#調(diào)用Java代碼的方法介紹

    這篇文章介紹了C#調(diào)用Java代碼的方法,有需要的朋友可以參考一下
    2013-10-10
  • unity實現(xiàn)鼠標(biāo)跟隨(ITween)

    unity實現(xiàn)鼠標(biāo)跟隨(ITween)

    這篇文章主要為大家詳細(xì)介紹了unity實現(xiàn)鼠標(biāo)跟隨,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#圖表算法之最小生成樹

    C#圖表算法之最小生成樹

    本文詳細(xì)講解了C#圖表算法之最小生成樹,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#中HttpWebRequest、WebClient、HttpClient的使用詳解

    C#中HttpWebRequest、WebClient、HttpClient的使用詳解

    這篇文章主要介紹了C#中HttpWebRequest、WebClient、HttpClient的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • c#實現(xiàn)幾種數(shù)據(jù)庫的大數(shù)據(jù)批量插入

    c#實現(xiàn)幾種數(shù)據(jù)庫的大數(shù)據(jù)批量插入

    這篇文章主要介紹了c#實現(xiàn)幾種數(shù)據(jù)庫的大數(shù)據(jù)批量插入,主要包括SqlServer、Oracle、SQLite和MySQL,有興趣的可以了解一下。
    2017-01-01
  • WPF利用TabControl控件實現(xiàn)拖拽排序功能

    WPF利用TabControl控件實現(xiàn)拖拽排序功能

    在UI交互中,拖拽操作是一種非常簡單友好的交互,這篇文章主要為大家介紹了WPF如何利用TabControl控件實現(xiàn)拖拽排序功能,需要的小伙伴可以參考一下
    2023-10-10
  • C#工程建立后修改工程文件名與命名空間操作

    C#工程建立后修改工程文件名與命名空間操作

    這篇文章主要介紹了C#工程建立后修改工程文件名與命名空間操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • c#使用熱鍵實現(xiàn)程序窗口隱藏示例

    c#使用熱鍵實現(xiàn)程序窗口隱藏示例

    下面我們將演示如何通過熱鍵隱藏窗口,會用到DllImports of Win32 API、CallBacks/Delegates,定制事件與事件的句柄,大家參考使用吧友
    2014-01-01
  • C#使用kernel32.dll讀寫INI文件的案例詳解

    C#使用kernel32.dll讀寫INI文件的案例詳解

    INI就是擴展名為"INI"的文件,其實他本身是個文本文件,可以用記事本打開,主要存放的是用戶所做的選擇或系統(tǒng)的各種參數(shù),這篇文章主要介紹了C#使用kernel32.dll讀寫INI文件的方法,需要的朋友可以參考下
    2023-05-05
  • 最新評論