使用Visual Studio的RPC调试功能同时调试COM程序的客户端和服务端
2009-01-23 15:16
513 查看
假设你现在正在开发一个COM系统,该系统由两个独立程序组成,一个是COM的服务器(COM Server),这是一个独立的exe程序;另外一个是调用这个COM服务器相关服务的COM客户端(COM Client)。这种场景一般是你希望你的COM服务器可以提供一些自动化(Automation)功能,允许你的用户写一些vbs程序来为你的程序提供一些自动化脚本。 例如Office Excel自己本身是一个独立的程序,但是如果你使用vbs脚本创建自动化程序自动处理数据,生成一些脚本的时候,你会发现Excel是以无窗口的形式启动的。
一般这种系统都是比较难调试的,这是因为一个函数调用需要跨过进程界限,由两个进程合作完成的,而通常情况下我们都只是调试一个进程。Visual Studio 2005以后,提供了一个RPC调试(RPC Debugging)功能,可以在你单步跟进一个远程COM方法调用的时候,自动将调试器附加到远程COM方法所在的进程。通过这种处理,在调试远程COM方法调用时,你就感觉是在调试同一个进程里面的方法。
以下面一个COM系统为例:
COM客户端:
这是一个简单的命令行程序,启动本地COM服务器,然后调用一个远程方法TestComMethod,然后退出。
COM服务端:
这是一个ATL EXE程序,我添加了一个类CTestClass,和一个函数TestComMethod。
调试设置
我们是希望在同一个调试器里面同时调试COM客户端和COM服务端,因此
1. 我们要确保将Visual Studio设置成非托管(Native)程序的即时调试器(JIT Debugger),方法是点击Visual Studio菜单里面的“工具(Tools)”—“选项(Options)”—“调试(Debugging)”—“即时调试(Just-In-Time)”,选中里面的“非托管(Native)程序”复选框,如下图所示:
2. 然后告诉Visual Studio我们希望做RPC调试,点击”—“调试(Debugging)”—“ 非托管程序(Native)”,选中“启用RPC调试(Enable RPC Debugging)” 复选框,如下图所示:
调试步骤
打开COM客户端的源代码工程,执行到远程COM方法调用的时候,单击F11,这个时候Visual Studio会弹出一个RPC设置对话框,选中“非托管(Native)程序”复选框,点击“确定(OK)”,最后等一会你就会发现Visual Studio停在了COM服务端TestComMethod的入口处。
一般这种系统都是比较难调试的,这是因为一个函数调用需要跨过进程界限,由两个进程合作完成的,而通常情况下我们都只是调试一个进程。Visual Studio 2005以后,提供了一个RPC调试(RPC Debugging)功能,可以在你单步跟进一个远程COM方法调用的时候,自动将调试器附加到远程COM方法所在的进程。通过这种处理,在调试远程COM方法调用时,你就感觉是在调试同一个进程里面的方法。
以下面一个COM系统为例:
COM客户端:
这是一个简单的命令行程序,启动本地COM服务器,然后调用一个远程方法TestComMethod,然后退出。
// ComCppClient.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <crtdbg.h> #import "D://Workspace//Forum//DebugTraining//DebugTraining//Debug//DebugTraining.tlb" no_namespace, raw_interfaces_only, named_guids int _tmain(int argc, _TCHAR* argv[]) { ::CoInitialize(NULL); ITestClass *pIUnk = NULL; HRESULT hr = ::CoCreateInstance(CLSID_TestClass, NULL, CLSCTX_LOCAL_SERVER, __uuidof(ITestClass), (void **)&pIUnk); _ASSERT(hr == 0); hr = pIUnk->TestComMethod(123); _ASSERT(hr == 0); pIUnk->Release(); ::CoUninitialize(); return 0; } |
这是一个ATL EXE程序,我添加了一个类CTestClass,和一个函数TestComMethod。
// TestClass.cpp : Implementation of CTestClass #include "stdafx.h" #include "TestClass.h" STDMETHODIMP CTestClass::TestComMethod(DWORD id) { MessageBox(NULL, L"This is a Test", L"Test", MB_OK); return S_OK; } |
我们是希望在同一个调试器里面同时调试COM客户端和COM服务端,因此
1. 我们要确保将Visual Studio设置成非托管(Native)程序的即时调试器(JIT Debugger),方法是点击Visual Studio菜单里面的“工具(Tools)”—“选项(Options)”—“调试(Debugging)”—“即时调试(Just-In-Time)”,选中里面的“非托管(Native)程序”复选框,如下图所示:
2. 然后告诉Visual Studio我们希望做RPC调试,点击”—“调试(Debugging)”—“ 非托管程序(Native)”,选中“启用RPC调试(Enable RPC Debugging)” 复选框,如下图所示:
调试步骤
打开COM客户端的源代码工程,执行到远程COM方法调用的时候,单击F11,这个时候Visual Studio会弹出一个RPC设置对话框,选中“非托管(Native)程序”复选框,点击“确定(OK)”,最后等一会你就会发现Visual Studio停在了COM服务端TestComMethod的入口处。
相关文章推荐
- 使用Visual Studio的RPC调试功能同时调试COM程序的客户端和服务端
- 使用 RPC 调试来调试 COM 客户端和服务器
- silverlight 服务端与客户端分2个VS程序打开,同时调试
- 使用Visual Studio 开发、调试WCF入门-2-无脑建立客户端
- Linux平台下基于C++语言使用gSOAP开发Web Service服务端和客户端程序
- 使用 visual studio 调试android NDK 程序
- linux下如何同时运行服务端和客户端程序
- 使用Visual Studio(VS)开发Qt程序代码提示功能的实现
- Apache XML-RPC (2.0/3.0)入门:使用java搭建服务端和客户端
- 使用Visual Studio 2015远程调试Linux程序
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
- 使用Visual Studio 开发、调试WCF入门-2-无脑建立客户端
- 使用Visual Studio(VS)开发Qt程序代码提示功能的实现
- 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写
- Apache XML-RPC入门:使用java搭建服务端和客户端
- C#编写Windows服务程序 (服务端),客户端使用 消息队列 实现淘宝 订单全链路效果
- 使用服务端和客户端两种方法 模拟网易邮箱实现全选,全不选的功能
- Visual studio 中调试oracle数据库的程序,出现“未找到Oracle客户端和网络组件”解决
- 使用openssl编写服务端和客户端程序
- TCP实现ECHO程序(服务端同时处理多个客户端的响应)