使用场景

假如你要开发的程序需要运行在独特的硬件上,比如:服务器,然而这个"独特的硬件"却不能给你装VS,这时候远程调试就登场了.

测试工具/环境一览

Key Value
VS版本 VS2017
被调试程序net框架版本 4.0
目标设备系统 Win7 32位
目标设备IP 168.5.16.42
我自己的ip 192.168.11.106

如果远程机器没密码,需要配置这个

测试代码

static void Main(string[] args)
{
Console.WriteLine("等待调试器...");
//这个属性用来检测本程序是否被调试器附加,开头这一段一直循环,等待调试器附加上来再继续执行代码
while (!System.Diagnostics.Debugger.IsAttached)
{
System.Threading.Thread.Sleep(100);
}
Console.WriteLine("调试器连接成功!"); var a = 123;
var b = 222;
var c = a + b;
Console.WriteLine(c); }



根据以上代码编译出程序

发送相关文件到目标设备

VS安装目录下有个远程调试文件夹,里面有多个版本,根据情况,选择一个,我这里选x86的...

然后是你要调试的程序文件,传输过去.

在目标设备,运行远程调试器

notice1:目标机器,是指被调试的机器,不是我们自己运行VS的机器

notice2:可能需要装net4.5与vc的一些运行库,如果运行不起来,尝试把net框架与vc运行库各个版本都装上试试.



在目标机器运行要调试的程序

在本机VS菜单打开附加调试的界面



1:首先输入远程ip和端口

2:输入要调试的程序名称

3:如果找不到,可以勾选左下角

4:选择程序,附加

如果对方面设备有密码,期间可能会让输入密码.如果没有密码,但是不管怎么试都失败,请参考上面配置安全选项.

断点成功



还可以看到变量内容:

其它细节

附加调试也能附加到本机进程

选择目标计算机的时候,默认本机计算机名称,不用改.

调试本机进程不用运行远程调试器.

可以让VS直接生成程序到远程设备

首先共享远程调试目录,给everyone读写权限:

在本机尝试打开

复制这个路径

粘贴到项目属性的这个地方

编译输出



成功!

调试也支持直接远程启动



不建议这么干,程序在使用AppDomain.CurrentDomain.BaseDirectory等方式获取启动路径的时候得到的会是远程路径:

VS远程调试与附加调试的更多相关文章

  1. [VS工具]远程在IIS附加调试代码

    1.首先在服务器以管理员的方式打开msvsmon.exe(一般这个文件路径:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\ID ...

  2. 选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。

    异常: 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 只有将调试器附加到该进程才会引发此异常. ...

  3. vs2010 未能将脚本调试器附加到计算机上的进程。已附加了一个调试器

    图片: 上周不小心升级了IE10,今天,VS2010报:未能将脚本调试器附加到计算机XXX上的进程iexplore.exe . 已附加了一个调试器”.启动调试失败. 到网上查找解决办法,最后用这个解决 ...

  4. 利用GDB在远程开发机进行调试

    由于一些环境的制约,很多同学都可能需要在开发机上进行调试,但由于开发机资源的限制,在开发机上直接进行本地的GDB环境配置就成了难题,这个时候其实我们可以利用GDB中自带的gdbserver工具就可以进 ...

  5. visual studio 2013 使用IIS Express附加调试MVC5

    1.如何找到调试的站点的进程[由于图片无法上传,就不上传图片了] 2.vs运行的时候,在状态栏会存在一个IIS Express 进程,点击显示所有的应用程序,找到想要调试的程序的PID; 3.附加调试 ...

  6. IE升级到10.0,VS2010启动调试时报“未能将脚本调试器附加到计算机..”

    IE升级到10.0,VS2010启动调试时报“未能将脚本调试器附加到计算机..” 今天,在调试代码时,调试器弹出提示框,报:未能将脚本调试器附加到计算机XXX上的进程iexplore.exe . 已附 ...

  7. pycharm远程linux开发和调试代码

    pycharm是一个非常强大的python开发工具,现在很多代码最终在线上跑的环境都是linux,而开发环境可能还是windows下开发,这就需要经常在linux上进行调试,或者在linux对代码进行 ...

  8. python远程调试及celery调试

    部分来自 from: https://www.xncoding.com/2016/05/26/python/pycharm-remote.html 你是否经常要在Windows 7或MAC OS X上 ...

  9. c# Clipboard.SetDataObject(bmp1) 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常

    c# Clipboard.SetDataObject(bmp1)  在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttri ...

随机推荐

  1. SWF 文件不能本地访问 只有仅限于文件系统的 SWF 文件

    http://blog.163.com/vituk93@126/blog/static/1709580342012512112757505/ SWF 文件不能被本地访问 不能访问本地 只有仅限于文件系 ...

  2. zabbix--3.0--3

      使用JMX监控jvm   vim /usr/local/tomcat/bin/catalina.sh 添加如下内容 CATALINA_OPTS="$CATALINA_OPTS -Dcom ...

  3. node 各模块及对应功能

    node 各模块及对应功能 node 模块 对应功能 net 处理 TCP dgram 处理 UDP http 处理 HTTP/1 http2 处理 HTTP/2 https 处理 HTTPS tls ...

  4. 不能将“this”指针从“const SqQueue<ElementType>”转换为“SqQueue<ElementType> &

    错误 1 error C2662: “int SqQueue<ElementType>::getLength(void)”: 不能将“this”指针从“const SqQueue<E ...

  5. sqoop上传数据到hdfs,并用hive管理数据。

    sqoop导入mysql数据表到HDFS中sqoop import --connect jdbc:mysql://master:3306/test --username root --password ...

  6. laravel中resource资源路由方法

    新增的 resource 方法将遵从 RESTful 架构为用户资源生成路由.该方法接收两个参数,第一个参数为资源名称,第二个参数为控制器名称. Route::resource('users', 'U ...

  7. Linux 高级文本处理命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields     ## 用于有特定分隔字符 [ ...

  8. Azure 认知服务 (1) 概述

    <Windows Azure Platform 系列文章目录> 在笔者之前的文章中,介绍的都是Azure  Infrastructure-as-a-Service (IaaS) 和Plat ...

  9. 前端js 省市联动

    代码下载地址 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  10. 转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: [丢失更新]A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ...