温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 如何实现远程调试c# 代码

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

发布时间:2020-11-07 15:19:52 来源:亿速云 阅读:303 作者: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问一下细节
推荐阅读:
  1. C#接收命令行参数的代码
  2. C#处理Json格式文件的源码演示

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

代码调试 远程调试
  • 上一篇新闻:
    利用JavaScript编写一个车辆管理系统
  • 下一篇新闻:
    parallelStream在Java8环境中如何使用

猜你喜欢

  • openwrt怎么修改lan口地址
  • spring的启动加载顺序及原理是什么
  • mysql中to_date函数的用法是什么
  • php fopen打开文件失败怎么解决
  • linux中route命令的作用是什么
  • centos7配置路由表没生效怎么解决
  • mysql分页查询sql语句怎么写
  • openwrt修改lan口地址进入不了怎么解决
  • spring类加载器实现的原理是什么
  • mysql中to_date函数的作用是什么
最新资讯
  • Svelte中的条件渲染和列表渲染是怎样实现的
  • 如何在Svelte应用中实现国际化
  • 如何对Svelte应用进行单元测试和端到端测试
  • 在Svelte中集成第三方库应注意什么
  • Svelte中的响应性原理是什么
  • 如何在Svelte中使用CSS预处理器
  • Svelte中的动画和过渡效果如何实现
  • 如何在Svelte组件之间传递数据和事件
  • 在Svelte中处理表单和用户输入有哪些特殊之处
  • SvelteKit是什么它如何增强Svelte开发
相关推荐
  • C# 自定义堆栈进行回文检测的代码
  • c# 窗体是否有重用的必要
  • C#同步网络时间和本地时间的代码
  • C# 执行外部命令的代码
  • C#通过foreach语句搜索数组元素的代码
  • C# 代码调整屏幕分辨率
  • Linux 中Tomcat远程调试代码的实现方法
  • Webservice如何实现远程调试及超时操作
  • Serverless如何实现在线远程调试
  • 如何利用IDEA远程调试代码

相关标签

c++ python javascript php vs debug c+ 远程调试 firephp c# idea springboot java linux tomcat hadoop webservice 超时 ssh omc
AI

PHP网站源码濮阳网站制作设计报价凉山英文网站建设哪家好福州百姓网标王推广多少钱贵阳网站优化阳泉百度竞价天水网站设计价格黔东南网站改版公司伊犁企业网站制作推荐衢州seo网站优化报价那曲网站搭建报价嘉兴营销网站淄博网站优化按天扣费报价丹竹头百姓网标王哪家好亳州网站优化排名报价常德SEO按效果付费推荐罗湖seo排名公司许昌网站优化软件推荐伊犁设计网站推荐漯河阿里店铺运营公司焦作网站制作设计多少钱吴忠百搜标王报价滁州关键词按天计费哪家好池州百度关键词包年推广价格沈阳网站定制桂林网站推广方案九江百度爱采购价格南京网页制作哪家好眉山至尊标王报价南京营销型网站建设价格平凉SEO按天收费价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化