【发布时间】:2015-12-24 16:57:54
【问题描述】:
我有应用程序(可执行文件),但我没有该应用程序的源代码。我可以启动这个应用程序。 我需要知道它是发布还是调试版本。
在 Windows 中是否有任何方法可以以编程方式确定该应用是使用 _DEBUG 宏编译的?
附:
CheckRemoteDebuggerPresent 可以检查附加的调试器进程是否存在。这不是我需要的。
【问题讨论】:
-
除非您有可用的调试信息可以告诉您在构建时定义了哪些宏,否则没有办法。
-
我发现了几篇文章“如何调试发布版本”,其中包含如何执行此操作的说明。而且我发现对于某些应用程序,加载的 DLL 列表对于发布/调试版本非常不同。因此我假设调试器可以区分发布/调试版本。
-
您可以检查它是否与标准 C 库 DLL 的调试或发布版本链接(如果不是静态链接)。确切的 DLL 名称取决于 Visual Studio 版本。
-
调试器不关心可执行文件是使用 Debug 还是 Release 编译选项构建的。它只是在显示有用的调试信息时有点蹩脚。由于您没有任何源代码,也可能没有 .pdb,所以这真的无关紧要。你会盯着机器代码看,根本不知道它做了什么,当然你也没有希望真正修复任何错误。
-
interjay 说的。运行
dumpbin.exe /imports YourApp.exe | findstr /i \.dll以查看导入了哪些 DLL。调试版本可能(但不保证)会导入 MSVCRTD.dll 或 VCRUNTIMED.dll 的某些变体。
标签: c++ c windows debugging visual-studio-debugging