MSVC++ 6.0 远程调试 - 在 OnPaint 消息处理程序中分步调试






4.73/5 (19投票s)
2002 年 1 月 25 日
4分钟阅读

259929

1440
本文介绍如何设置 Visual C++ 6.0 的远程调试功能。只需几个步骤和另一台机器(当然!),我将向您展示如何单步进入 OnPaint 消息处理程序。
引言
大多数从事图形应用程序或全屏窗口应用程序开发的开发人员有时需要确切了解 OnPaint
函数或任何其他屏幕绘制函数背后发生了什么。问题是,当您在 OnPaint
消息处理程序中设置断点时,窗口焦点会转移到 VC++ 环境。此时,您的 onpaint
事件将丢失,您甚至无法看到绘制过程中发生了什么。这种情况在 DirectX 编程中也很常见,因为程序需要使用全屏模式,并且不允许您切换到 VC++。
MS VC++ 有一个针对此问题的变通方法,称为远程调试器。远程调试器允许您在一台计算机上执行应用程序,同时在另一台计算机上单步调试代码。
为了解释 VC++ 的这个功能如何工作,我们将使用本文提供的示例项目。
环境设置
您需要做的第一件事是在远程计算机上安装远程调试器。如果您在远程计算机上没有安装 VC++(不是必需的 :)),则需要将以下文件复制到远程计算机的系统目录中。
MFC42D.DLL
MFCO42D.DLL
MSVCRTD.DLL
复制这些文件后,您需要建立远程计算机与“主机”计算机(我们现在将托管 VC++ 的计算机称为“主机”)之间的连接。为此,请在远程计算机上创建一个文件夹并共享它,以便主机计算机可以访问它。您必须在主机计算机上执行相同的操作。创建一个名为“Test”的文件夹并共享它,以便远程计算机可以访问它。
下一步是将远程调试器文件复制到远程计算机。为此,在主机计算机上,映射您之前在远程计算机上共享的驱动器。映射驱动器后,复制远程调试器文件。这些文件可以在 Visual Studio 文件夹下的 Common\MsDev98\Bin 子文件夹中找到。这些文件是
DM.DLL
MSDIS110.DLL
MSVCMON.EXE
MSVCP60.DLL
PSAPI.DLL
TLN0T.DLL
复制完文件后,在远程计算机上,转到复制文件的文件夹。找到 MSVCMON.EXE 文件并启动它。启动后,您将看到以下屏幕:
当您看到此屏幕时,点击“连接”按钮,以便您的计算机开始监听远程调试器的任何连接。将显示以下屏幕。
设置 VC++ 项目
远程计算机已启动并运行。现在我们将使用示例项目来测试远程调试器。首先,将示例项目文件复制到主机计算机上共享的“Test”文件夹中。打开示例项目并找到 OnPaint
消息处理函数。该函数必须包含以下代码:
CPaintDC dc(this); // device context for painting
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
for(int i=0;i<640;i+=50)
{
dc.TextOut(200,i, "THIS IS DRAWED STEP BY STEP!");
}
}
在包含“for
”语句的行上设置断点,以便我们在绘制窗口时能够单步调试代码。
下一步是设置项目以使用远程调试器运行。转到“项目”菜单,然后选择“设置”菜单项。此时应该会出现项目设置窗口。选择“调试”选项卡。在此窗口中,我们将看到 4 个文本框。在第一个文本框中,您需要输入应用程序可执行文件的完整路径,正如主机计算机所看到的。(例如:我的项目在主机计算机上的 C:\Test 下运行,因此您需要输入 C:\Test\TestRemoteDebug.exe)。
第二个和第三个文本框可以留空。在第四个文本框中,您需要输入应用程序在远程计算机上的路径。如果您已将示例项目复制到“Test”文件夹,则需要告知远程计算机上映射驱动器的路径(例如:假设您已将主机计算机的“Test”文件夹映射到远程计算机的 F: 驱动器号。在这种情况下,您需要在文本框中输入 F:\TestRemoteDebug.exe)。完成此步骤后,您可以关闭项目设置窗口。
我们几乎准备好了!现在您需要告知项目哪个计算机将作为远程调试器。为此,转到“生成”菜单,然后选择“调试器远程连接...”选项。在此窗口中,选择 TCP/IP 协议,然后点击“设置”。在设置窗口中,输入远程计算机的名称或 IP 地址。之后,您可以点击“确定”按钮关闭此窗口。
好的!我们准备好了!按 F5 键(或选择“运行”菜单项)开始您的项目。第一次执行时,您可能会看到一个类似以下的屏幕:
出现这种情况是因为 VC++ 需要在本地计算机上找到项目使用的每个 DLL 的本地引用。当此消息框第一次出现时,只需提供本地 DLL 的正确路径即可。
现在,只需在主机计算机上单步调试代码,看看远程计算机上发生了什么!玩得开心!
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。