如何在 Visual Studio (C++) 中找到应用程序的入口点
Posted
技术标签:
【中文标题】如何在 Visual Studio (C++) 中找到应用程序的入口点【英文标题】:How to find an application's entry point in Visual Studio (C++) 【发布时间】:2016-08-17 15:40:33 【问题描述】:这个问题可能适用于用 Visual Studio 编写的任何编程语言,但我更关心 C++。
有没有办法在 Visual Studio 中轻松确定应用程序入口点?
对于相对较小的应用程序,这可能很容易,但对于大型应用程序,这将非常困难。在我的特定情况下,我知道设置为启动的项目是具有入口点的项目,但我无法找到它,即使应用程序启动并运行良好。
【问题讨论】:
项目的调试设置中没有'stop at entry point'选项吗? 嗨@barakmanos 我找不到它,你能更具体地了解一下这个选项的位置吗? 查看this MSDN page,上面写着main
、WinMain
、DllMain
这三种形式的用户自定义入口点。
或者,只需按 F10 或 F11 而不是 F5(假设默认键绑定)开始调试过程。它应该让你进入你的入口点函数并等待。
@WhozCraig 给它一个答案,拜托,这就是我要找的!
【参考方案1】:
如果您想查找可执行的 C++ 项目,而不是在所有 *.vcxproj
文件中搜索 <ConfigurationType>Application</ConfigurationType>
。
如果您在此应用程序中寻找入口点函数,请搜索 main
、wmain
或 WinMain
函数。
还可以使用/ENTRY
参数重新定义入口点,因此您可以检查Configuration Properties > Linker > Advanced > Entry Point
项目参数或在*.vcxproj
中搜索/ENTRY
。
【讨论】:
我只是很感激,这里的一些东西我已经知道了,但是我正在寻找的更像是一种简单的方法,并且评论中的 WhozCraig 发布了它,但非常感谢! @meJustAndrew 对,但如果无法启动调试,您将能够使用其他方法。【参考方案2】:在 C++ 中,完全编译的程序只能定义一个 main
方法。如果有多个,编译器将抱怨“main 的多个定义”或其他类似措辞的消息。
因此,最简单的选择是搜索符号 main
(或者,如果编译为 Windows 子系统程序,则为 WinMain
)并找出哪些对应于“启动”项目。即使在相对较大的解决方案中也不应该有那么多。
【讨论】:
我只是很感激,这里的一些东西我已经知道了,但是我正在寻找的更像是一种简单的方法,并且评论中的 WhozCraig 发布了它,但非常感谢! 在大型项目中仅根据文本搜索主函数可能会遇到相当大的问题。表达式“main”是出现在 cmets 和其他中的一个非常通用的词......我经常做一些事情,比如搜索 'main(',但是:1) 人们有时会在括号前留一个空格 2) 有些人使用宏定义 main 3) 事实上,通常有多个 main 函数,但“#ifdef”它们只在某些目标中构建。这种策略通常用于测试......在这种情况下,您可能需要遍历数百个主电源,直到找到“真正的主电源”。【参考方案3】:当希望在 main/WinMain 函数的顶部停止执行,同时在 Windows 上以交互方式调试进程时,我通常只使用 F10/F11(假设 Visual 中的默认 C/C++ 键绑定Studio IDE)指示调试器单步执行(启动进程,然后执行该步骤,然后中断)。
请注意,这可能并不总是如您所愿。如果您想捕捉全局初始化、对象构造等,这些在到达main
或WinMain
之前已经完成。这些需要在 CRT 源代码中为 real 全局启动代码(最终调用您的 main
或 WinMain
)进行额外的调试和设置断点。但是,如果您只是想为使用调试符号构建的程序中断主入口,这可能是最简单的方法。
【讨论】:
也感谢您的补充!以上是关于如何在 Visual Studio (C++) 中找到应用程序的入口点的主要内容,如果未能解决你的问题,请参考以下文章
(Visual Studio 杂记) )—— Visual Studio 如何 设置 C++ 标准版本
如何在Visual Studio中选择C++和C#的编译器版本
如何在Visual Studio和CodeBlocks中反编译C++代码
如何只用visual c++编译器而不安装visual studio