附加到运行进程
Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程。可以使用此附加功能执行以下操作:
-
调试并非在 Visual Studio 中创建的应用程序。
-
同时调试多个进程。 也可以通过在单个解决方案内启动多个项目来调试多个进程。
-
调试正在远程计算机上运行的进程。
-
调试一个 DLL,该 DLL 运行在不易从 Visual Studio 启动的独立进程上。例如,与 Internet 信息服务一起运行的服务或 ISAPI DLL。
-
当一个进程在 Visual Studio 外运行时发生崩溃时,将自动启动调试器。这就是实时调试。
一旦附加到某个程序,就可以使用调试器执行命令、检查程序状态,等等。当然,检查程序的能力可能会受到某些限制,这取决于程序是否用调试信息生成,是否可以访问程序源代码,以及公共语言运行时 JIT 编译器是否在跟踪调试信息。
![]() |
---|
为使调试器附加到用 C++ 编写的代码,该代码需要发出 DebuggableAttribute。 |
调试准备:Win32 项目
Win32 应用程序是用 C 或 C++ 编写的传统 Windows 程序。在 Visual Studio 中调试此类应用程序非常简单。
Win32 应用程序包括 MFC 应用程序和 ATL 项目。 Win32 应用程序使用 Windows API,也可使用 MFC 或 ATL,但不使用公共语言运行时 (CLR)。 但是,它们可以调用使用 CLR 的托管代码。
下面的过程解释如何在 Visual Studio 中调试 Win32 项目。调试 Win32 应用程序的另一种方法是在 Visual Studio 之外启动并附加到该应用程序。
调试 C 或 C++ Win32 应用程序
-
在 Visual Studio 中打开项目。
-
在“调试”菜单上选择“启动”。
-
用向导创建 Windows 应用程序项目时,Visual Studio 将自动为调试和发布配置创建所需的设置。必要时,可更改这些设置。
手动设置调试配置
-
在“视图”菜单上,单击“属性页”。
-
如果“配置属性”节点尚未打开,则单击以打开该节点。
-
选择“常规”,并将“输出”行的值设置为“调试”。
-
打开“C/C++”节点,然后选择“常规”。
在“调试”行指定要由编译器生成的调试信息的类型。可以选择的值包括“程序数据库(/Zi)”或“用于编辑并继续的程序数据库(/ZI)”。
-
选择“优化”,然后在“优化”行的下拉列表中选择“禁用(/0d)”。
优化代码更难调试,因为生成的指令与源代码并不直接对应。 如果发现程序具有只出现在优化代码中的 bug,则可以打开此设置,但应记住“反汇编”窗口中显示的代码是从可能与在源窗口中见到的内容不匹配的优化源生成的。有些功能(如单步执行)显示的断点和执行点有可能不正确。
-
打开“链接器”节点,然后选择“调试”。在第一个“常规”行的下拉列表中,选择“是(/DEBUG)”。调试期间应始终这样设置。
实际问题:Visual Studio 解决Windows Web服务框架中出现了无法识别的错误
This is happening because Visual Studio is a 32-bit application. Only 64-bit applications are able to debug other 64-bit applications, so Visual Studio creates a fake remote connection to a 64-bit debugger when debugging 64-bit apps. If you select the prefer 32-bit option, then this is unnecessary.
解决方法:使用远程调试来解决调试问题