如何实现远程调试c#代码

  介绍

今天就跟大家聊聊有关如何实现远程调试c#代码,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>

<强> 1。讲故事

每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇:

我去,本地环境代码跑的哧溜,上了测试环境出问题
我去,第三方提供的dll跑出错误了

<强>

<强> 1。本地环境没问题,上了测试出问题

相信很多朋友都有我这样类似的遭遇,明明程序代码,配置文件都一样,挪了一个窝就出问题,你说气人不,既然问题出了那怎么快速解决呢?对,就是用调试,但程序部署在centos上,送一个visualstudio上去也不现实,在这种限制级条件下还想调试怎么办呢?不错,可以上远程调试,然后就很快查到了测试机器中的某一个环境变量搞错了,事情的来龙去脉搞清楚了,接下来就看看怎么实现当地到centos的远程调试。

1)测试代码
为了方便演示,我就在行动中读取战略环境变量。

 yum安装openssh服务器解压缩卷

安装完成后,就能看到22端口已启动

# netstat -tlnp root@localhost数据   活跃的互联网连接(只有服务器)   原型Recv-Q Send-Q本地地址外国地址状态PID/项目名称   tcp 0 0 0.0.0.0:22 0.0.0.0: * 1126/sshd听   tcp 0 0 127.0.0.1:631 0.0.0.0: * 3037/cupsd听   tcp 0 0 127.0.0.1:25 0.0.0.0: * 1739/主听   tcp6 0 0::: 22::: * 1126/sshd听   tcp6 0 0:: 1:631::: * 3037/cupsd听   tcp6 0 0:: 1:25::: * 1739/主听

3)程序的发布配置
发布配置上,第一个要确保是调试版本,第二个要确保是可移植模式(便携式),如下图:

如何实现远程调试c#代码

4)使用附加进程调试
在菜单栏依次选择:调试→附加到进程,然后填写ssh需要的各种信息,如下图:

如何实现远程调试c#代码

点击连接后,就能看到远端机器的dotnet程序进程号,选择该进程进行附加,在选择代码类型中选择Nanaged (。净核心为Unix)即可,如下图:

如何实现远程调试c#代码

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

如何实现远程调试c#代码

<强> 2。第三方dll出错误了

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

如何实现远程调试c#代码

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

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

    <李>更加灵活李

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

    <李>功能强大李

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

    <李>更易于保存李

这个就有意思了,在断点上右键是弹出编辑面板,点击左键是关闭断点,问题就出在这里,经常由于手贱,本想点右键结果点了左键,# 128552;及# 128552;及# 128552;....好不容易设置好的条件没了……真的没了,# 128557;及# 128557和# 128557;,从此以后,路转黑。如下图:

如何实现远程调试c#代码

如何实现远程调试c#代码