【问题标题】:Windows COM - how to debug a COM serverWindows COM - 如何调试 COM 服务器
【发布时间】:2011-08-12 20:06:19
【问题描述】:

我有一个进程耗尽的 com 服务器(用 C++、ATL 编写)。在我的一台计算机上,我只需在调试器下启动 COM、设置断点并从客户端进程连接到服务器,就可以轻松调试服务器代码。

在我的另一台计算机上不会发生这种情况,如果我从一开始就在调试器下启动 COM 服务器,客户端使用同一服务器的另一个实例,调试服务器的唯一方法是在客户端已经连接到它之后开始了。如何配置?

【问题讨论】:

  • 那台机器上可能安装了另一个版本的 COM 服务器?尝试在系统注册表中搜索 COM 服务器,如果发生了,请卸载另一台。
  • 您是否尝试过让 COM 通过生成错误来调用调试器。例如 Assert(0) 当它遇到错误时,它会询问您是否要开始调试。

标签: com


【解决方案1】:

问题在于,在 Vista 及更高版本下,当您启动提升的 com 服务器(以便注册表部分在构建结束时进入注册表)时,COM 客户端将启动另一个 COM 服务器实例(同时他的诚信水平,例如中等和不高)

所以我必须以普通用户(而不是以管理员身份运行)为服务器运行 Visual Studio,并且必须从命令行进行 COM 注册。

【讨论】:

  • 感谢您的信息!我实际上并没有尝试调试我的进程外服务器的初始化,但我不明白为什么另一个进程实例不断弹出,因为 ATL 应该已注册该类以供多用。
【解决方案2】:

正常启动您的流程。使调试器在 COM 客户端的断点处停止。启动另一个 Visual Studio 实例(我假设您正在运行 Visual Studio),并附加到 out of proc 服务器进程。在 Visual Studio 2008 中,您可以通过在 Tools 菜单中选择 Attach to process... 来完成此操作。然后只需选择要调试的进程,就可以了。您可能需要手动打开源代码文件来设置断点,因为您没有在原始项目的上下文中进行调试。

【讨论】:

  • 这正是我想要避免的。我希望能够直接从调试器启动我的服务器,否则当我能够连接到已经启动的服务器时,我会错过服务器中的一些“初始化”步骤
猜你喜欢
  • 2011-11-10
  • 2017-09-09
  • 1970-01-01
  • 2011-09-18
  • 2015-01-30
  • 2020-08-07
  • 1970-01-01
  • 2012-05-31
  • 2011-07-29
相关资源
最近更新 更多