VC++6.0远程调试(亲试成功)
0 前言
VS2008及以上远程调试上篇已经讲过,这里再讲下VC++6.0开发环境下的远程调试能力,仅需下面4步即可,更方便的就接着后面的5-6步。
因为目标程序需要在有采集卡等相关硬件支持下的工控机上工作,工控机上面一般没有调试环境也不会放置源代码(出于保密)。假如工控机上的目标程序运行中出了问题,就需要有调试环境却无法安装采集卡等硬件的笔记本上进行远程调试。
1 远程调试条件
1.两者之间使用有线或无线连网。
2.目标机器与本机的调试机器连接通讯,需要四个文件:MSVCMON.EXE、DM.DLL、TLN0T.DLL和MSDIS110.DLL。它们可在VC6安装文件夹的Common/MSDEV98/Bin下面找到。
3.VC 调试程序执行需要的三个动态库文件:MFC42D.DLL,MFCO42D.DLL,MSVCRTD.DLL,有时可能需要ntdll.dll,它们可在系统文件夹\windows\system32下找到。
或者通过搜索方式找到以上所需的8个文件,开始--搜索--文件或文件夹--在"要搜索的文件或文件夹名为"框中,输入上面的文件,点"立即搜索"按钮搜索,然后将它们全部复制到远程目标机器的执行程序文件夹E:\remote下即可。具有以上条件后,在远程目标机器上双击运行msvcom.exe,不管其它设置,直接点"Connect"按钮即可。
注意:在Win7之后的系统下,这些文件可能需要和被调试的可执行程序,放在一个文件夹下才可以。

2 开发环境的远程调试设置
在本机的开发环境中,打开远程调试开关,点菜单 Build——Debugger Remote Connection...,弹出窗口,默认是在Local项(本地,不远程调试时,要改回本地选项),现在要选远程的Network(TCP/IP),然后点按钮Settings...,在弹出框中,输入远程目标机器的IP或者机器名,比如:10.10.1.63,最后点OK即可。

3 设定目标机器的执行路径和文件名
比如在本机笔记本上调试生成的可执行程序名为c:\dkqchtx\debug\dkqchtx.exe,在远程目标机器工控机上的路径为e:\remote\dkqchtx.exe,那么,在本机开发环境的菜单 Project —— Settings,在Debug页面底部的Remote executable path and file name框中,输入在远程的工控机上程序运行所在的路径和文件名:e:\remote\dkqchtx.exe。

4 启动调试
编译一下程序,把新编译出来的dkqchtx.exe复制到目标机器的e:/remote下面,就可以在本地机器上启动调试了。调试中的询问的信息(可能会有很多)一律按确定即可。
=============
虽然到此就完成了整个远程调试项目,但是这样有一个问题,就是每次小小的改动,编译链接后,都需要将本地机器上的执行文件复制到远程机器设定的路径下才可以调试,也就是需要始终保持两者完全一致,调试就很不方便,为了改变这种状况,可将远程目标机器的执行程序所在的文件夹读写共享,让本机笔记本上登录的用户具有读写权,直接将编译链接的执行程序放到远程目标机器上。
5 将本地生成的可执行程序直接放到远程机器的读写共享文件夹下,以方便调试
1.读写共享远程文件夹
,这样防止多用户读写。点按钮"权限",在弹出框的"输入对象名称来选择"中,输入刘亮,这是两者所在的局域网中,登录到本地笔记本上的用户,点"确定"按钮,刘亮就会出现在"组或用户名称"框中,选择其中的刘亮,将下面3个选项"完全控制","更改","读取"都选上,点"确定"即可,当然可以将用户Everyone 删除会更安全。这样就是让登录本地笔记本上的用户刘亮,具有读写远程机器上的文件夹E:\remote共享后的能力,以便可将输出的可执行程序,直接写入到远程机器的读写共享文件夹remote_share下。

2.设置开发环境的输出文件位置
在本地开发环境的菜单 Project -- Settings...,切换到Link页面,在Output file name框中,输入\\10.10.1.63\remote_share\dkqtx.exe,这里10.10.1.63是远程机器的ip地址,remote_share是文件夹共享后的名称,dkqtx.exe是编译链接后输出的调试文件,这样就将输出直接放到远程读写的共享文件夹下。

3.重新设定执行debug会话和目标机器的执行路径和文件名
在本地开发环境中,Project——Settings...,切换到Debug页面,在Excutable for debug session框中已经跟着自动改为:\\10.10.1.63\remote_share\dkqtx.exe,与上面Link输出设置一致。在本Debug页面底部的Remote executable path and file name框中,要输入在远程的工控机上程序运行所在的路径和文件名:e:\remote\dkqtx.exe 即可。注意,这里的文件名称从原来dkqchtx.exe改为 dkqtx.exe, 也就是说本地和远程上的文件名,可以是任意只要一致就可以了。

重新全编译连接,Build——Rebuild All,就可以了,以后任何的改动就不需要复制文件,调试很方便。
6 将远程共享文件夹映射成本地盘
以上Link输出和 Debug的会话执行,都是较长的子串\\10.10.1.63\remote_share\dkatx.exe, 为了书写简单,可以在本地机器上,将远程机器共享的文件夹映射成一个本地盘符,方法如下:
在本地机器的IE浏览器地址栏里,输入远程机器的IP地址:\\10.10.1.63 按回车,右击出现的共享文件夹remote_share——选择映射网络驱动器,在弹出的页面中的驱动器框中,选择一个你本地没有使用的盘符,比如Y:,这样就将远程机器10.10.1.63下的共享文件夹remote_share,映射成Y: ,以后写\\10.10.1.63\remote_share\dkatx.exe的地方,就可简写为Y:\dkqtx.exe ,使用起来很方便。

当然,调试的总条件,需要选择Debug 调试方式,菜单 Build——Set Active Configuration... ,从中选择 Win32 Debug ,之后需要重新全编译连接,菜单 Build——Rebuild All。
上面的内容大致都是http://blog.sina.com.cn/s/blog_45eaa01a01014eb5.html 中的内容,以下为亲试截图:





最终在目标机器上将程序调试运行起来了~
VC++6.0远程调试(亲试成功)的更多相关文章
- VC++ 6.0远程调试配置
VC开发环境之所以提供远程调试的能力,是因为有些情况下单机调试会让你崩溃掉...比如,调试GUI程序的WM_PAINT消息,因为要单步调试,所以调试器会对界面的重绘产生副作用(Heisenberg不确 ...
- vc 6.0 远程调试
http://blog.sina.com.cn/s/blog_45eaa01a01014eb5.html
- VS2008 远程调试器未成功安装,没法使用?
Win7 64位系统,安装VS2008后,想使用远程调试功能,结果不能使用! 在VS2008的安装包下有个 Remote Debugger 的文件夹,在里面找到 x64 的 rdbgsetup.exe ...
- VC++6.0 打印调试信息
1.在MFC中加入TRACE语句 2.在TOOLS->MFC TRACER中选择 “ENABLE TRACING”点击OK 3.进行调试运行,GO(F5)(特别注意:不是执行‘!’以前之所以不能 ...
- linux上安装mysql,亲试成功
安装mysql参考 网址https://blog.csdn.net/a774630093/article/details/79270080 本文更加详细. 1.先检查系统是否装有mysql rpm - ...
- linux重新设置密码,亲试成功
1:进入/etc/my.cnf 在[mysqld]下添加一行skip-grant-tables 2:保存配置文件后,输入whereis systemctl(提示redirecting to 某个目录下 ...
- eclipse远程调试Hadoop
环境需求: 系统:window 10 eclipse版本:Mars Hadoop版本:2.6.0 资源需求:解压后的Hadoop-2.6.0,原压缩包自行下载:下载地址 丑话前头说: 以下的操作中,e ...
- VC++ 6.0中实现三叉切分窗口与多视图 [转]
一.引用 当用户需要同时对文当的不同部分进行编辑时,常常会用到切分窗口;这些窗口可以都是相同的视,或者一个窗口为列表视,而另一个为树型视图.应用程序框架有多种方式来表示多视图,切分窗口是其中的方式之一 ...
- Spring boot 远程调试
设置远程调试,可以在正式环境上随时跟踪与调试生产故障. 依赖 在 pom.xml 中增加远程调试依赖(试了下,不加也行). <plugins> <plugin> <gro ...
随机推荐
- 【Unity】使用Resources类管理资源
最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle).在此简单总结运行时用R ...
- windows和linux文件的转换
由于windows与unix系统的换行不一致,因此需要相互之前的格式转换 只需要在linux上执行 dos2unix filename 将windows下的文本文件转换成linux上可以浏览的文件 u ...
- redis获取当前时间精确到微秒
在redis取得当前时的方法为执行time命令 127.0.0.1:6382> time1) "1495780564"2) "894089" 第一行为以 ...
- node学习笔记5——post数据传递
上一篇有讲到get数据的传递.有了上一篇的了解,今天讲下如何获取到post传递过来的数据. 通过post传送的数据,在node里面主要是通过req.on('data',function (data) ...
- android 避免线程的重复创建(HandlerThread、线程池)
最近在android开发中,用到都是new Thread(){...}.start()这种方式.本来这样是可以,但是最近突然爆出Performing stop of activity that is ...
- Javascript导航菜单13则
来源:http://www.noupe.com/ajax/13-awesome-java-script-css-menu.html翻译:http://parandroid.com下面为你准备了13个利 ...
- Mac OS, Mac OSX 与Darwin
作为收购 NeXT 公司的结果,苹果公司获得了 NeXTSTEP 架构中的 Mach 和 Objective-C 等设计.尽管 NeXTSTEP 本身已经不再发展了,但是其中的组件在 OS X 中获得 ...
- JAVA中如何用接口实现多继承和多态 (非常好)
---------------------------------------------------------------多态1.JAVA里没有多继承,一个类之能有一个父类.而继承的表现就是多态. ...
- c++ 文件增加#ifndef、#define 和 #endif 语句的意义
文件currency.h (或 currencyOverload.h) 包含了 currency类的声明和实现细节. 在文件头, 应该加上语句 #ifndef Currency_ #define Cu ...
- SpringBoot系列一:SpringBoot的产生
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 长期以来 Java 的开发一直让人所诟病: ·Java 项目开发复杂度极其高: · Java 项目的维护非常困难: · 在云时代 ...