一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试

一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试,第1张

概述一:背景 1. 讲故事 每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇: 我去,本地环境代码跑的哧溜,上了测试环境出问题 一:背景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 -tlnpActive 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),如下图:

4) 使用附加进程调试

在菜单栏依次选择:DeBUG -> Attach To Process,然后填写 ssh 需要的各种信息,如下图:

点击 Connect 后,就能看到远端机器的 dotnet程序 进程号,选择该进程进行附加,在 Select Code Type 中选择 Nanaged (.NET Core for Unix)即可,如下图:

5) 顺利调试

在 浏览器中键入: http://192.168.142.130/Home/Index ,可以看到我的 C# 代码被命中,也顺利的拿到了远端机器的 环境变量,问题也就迎刃而解。

2. 第三方 dll 出 BUG 了

调试程序除了使用 F9 进行调试,相信也有不少朋友知道断点是可以编辑的,比如说:设置表达式断点,过滤器断点,命中次数断点,动作断点,下如图:

第一个问题就来了,这些花式断点,你真的会用吗?真的会经常用吗?

让我来回答的话,不到万不得已我是不会用的,我更愿意在代码中加入利于调试的测试语句,原因有三点:

更加灵活

这个显而易见,在面板中设置条件相比用纯语句设置要麻烦得多,点来点去,而且还要条件叠加,复杂的很,我是不喜欢。

功能强大

编辑面板上只有简单的并且关系,而且各个条件还是同级别的,无法做到各个条件的或者关系以及层级或者递归的包含关系,所以。。。没办法。。。

更易于保存

这个就有意思了,在断点上右键是d出编辑面板,点击左键是关闭断点,问题就出在这里,经常由于手贱,本想点右键结果点了左键 总结

以上是内存溢出为你收集整理的一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试全部内容,希望文章能够帮你解决一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1213781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存