如何在 Visual Studio (C++) 中找到应用程序的入口点

How to find an application's entry point in Visual Studio (C++)

这个问题可能适用于用Visual Studio编写的任何编程语言,但我更关心C++。

有没有办法轻松确定Visual Studio中的应用程序入口点?

对于相对较小的应用程序,这可能很容易,但对于大型应用程序,这将非常困难。在我的特殊情况下,我知道设置为启动的项目是具有入口点的项目,但我无法找到它,即使应用程序启动并运行良好。

在 C++ 中,一个完全编译的程序只能有一个定义的 main 方法。如果不止一个,编译器将抱怨 "multiple definitions of main" 或其他类似措辞的消息。

所以,最简单的选择是搜索符号 main(或者,如果编译为 Windows 子系统程序,WinMain)并找出哪些对应到 "startup" 项目。即使在相对较大的解决方案中也不应该有那么多。

如果您想查找可执行的 C++ 项目而不是在所有 *.vcxproj 文件中搜索 <ConfigurationType>Application</ConfigurationType>

如果您要在此应用程序中查找入口点函数,请搜索 mainwmainWinMain 函数。

也可以使用 /ENTRY 参数重新定义入口点,因此您可以检查 Configuration Properties > Linker > Advanced > Entry Point 项目参数或在 *.vcxproj.[=19= 中搜索 /ENTRY ]

如果希望在 main/WinMain 函数顶部 停止 执行,同时在 Windows 上交互式调试进程,我通常只使用 F10/F11(假设 Visual Studio IDE 中的默认 C/C++ 键绑定)指示调试器单步执行(启动进程,然后执行步骤,然后中断)。

请注意,这可能并不总是如您所愿。如果你想捕获全局初始化、对象构造等,这些在到达 mainWinMain 之前就已经完成了。这些需要在 真实 全局启动代码(最终调用您的 mainWinMain)的 CRT 源代码中进行额外的调试和设置断点。但是,如果您只是想在使用调试符号构建的程序的主入口处中断,这可能是最简单的方法。