91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現遠程調試c# 代碼

發布時間:2020-11-07 15:19:52 來源:億速云 閱讀:316 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何實現遠程調試c# 代碼,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一:背景

1. 講故事

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

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

二:兩個大坑的解決方案

1. 本地環境沒問題,上了測試出問題

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

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

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

      return View();
    }
  }

2) 安裝 SSH
要遠程調試,需要在遠端機安裝 SSH,因為后面附加進程調試 就要借助 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) 程序的發布配置
發布配置上,第一個要確保是 debug 版本,第二個要確保是 可移植模式 (Portable), 如下圖:

如何實現遠程調試c# 代碼

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

如何實現遠程調試c# 代碼

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

如何實現遠程調試c# 代碼

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

如何實現遠程調試c# 代碼

2. 第三方 dll 出 bug 了

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

如何實現遠程調試c# 代碼

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

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

  • 更加靈活

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

  • 功能強大

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

  • 更易于保存

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

如何實現遠程調試c# 代碼

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

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

    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 的時候命中斷點
這個用條件表達式斷點就可以了,非常簡單,如下所示:

如何實現遠程調試c# 代碼

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

如何實現遠程調試c# 代碼

看完上述內容,你們對如何實現遠程調試c# 代碼有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

松滋市| 文山县| 镇康县| 额济纳旗| 博白县| 政和县| 三门县| 金湖县| 岢岚县| 织金县| 曲阜市| 敖汉旗| 中卫市| 龙南县| 二连浩特市| 长丰县| 新邵县| 长阳| 葫芦岛市| 儋州市| 自贡市| 永德县| 贵南县| 黄陵县| 天气| 前郭尔| 康保县| 虎林市| 大田县| 平邑县| 衢州市| 浙江省| 乌兰县| 南部县| 德州市| 北票市| 墨竹工卡县| 武冈市| 额尔古纳市| 新和县| 涟源市|