【问题标题】:VS C++ 2010 debugging with external entry point带有外部入口点的 VS C++ 2010 调试
【发布时间】:2011-12-09 16:38:32
【问题描述】:

我正在创建 Win32 应用程序,我有两个项目。

第一个是包含_tWinMain()函数的静态库,它是Win32应用程序的入口点。
另一个是链接此.lib 的应用程序。这样,应用程序就不必创建自己的 _tWinMain() 函数,因为它位于 .lib 文件中。

首先,我构建了静态库。然后我构建应用程序。问题是当我开始调试(F5)时,窗口显示然后立即关闭(在调试或发布配置中)。当我在没有调试(Ctrl+F5)的情况下启动程序或仅打开 .exe 文件时不会出现此问题。
是否可以在静态库中有入口点时进行调试?

【问题讨论】:

  • 你的依赖会不会有点乱? _tWinMain() 如何调用它不知道存在的应用程序?
  • 有可能。 lib 中的 _tWinMain() 只需要一个函数的声明。并且该函数的定义可以在应用程序中完成。
  • 应用程序即使没有声明 _tWinMain() 也能工作(当然没有调试),因为编译器不寻找函数声明,而是链接器寻找它的定义。调试时,无论_tWinMain()是否被声明,应用程序都会退出。
  • 如果你解决了,写一个答案

标签: c++ visual-studio-2010 debugging entry-point


【解决方案1】:

我认为应该可以。您是否尝试过使用 F11 或 F10 而不是 F5 启动应用程序时会发生什么?然后它将启动应用程序,但直接在 WinMain 处中断。

【讨论】:

  • 当我使用 F11 或 F10 启动应用程序时,它会在 _tWinMain() 处中断。包含 _tWinMain() 实现的第一个项目的源文件打开(请注意,此代码尚未在应用程序项目中编译,它已内置到链接的 .lib 中)。但是如果我按 F5 继续,程序就会终止。此外,如果我在应用程序的源代码中添加任何断点,它会说:“断点不会被命中。没有可执行代码与此行关联”。但是,断点在 lib 项目的源文件中起作用,例如在 _tWinMain() 中。
  • 这听起来像是应用程序的构建设置可能不正确。检查这些,如果您没有发现任何奇怪的东西,请在调用应用程序项目中的代码之前在库源代码中设置断点。按 F10/F11 直到调试器想要进入应用程序项目。希望它会给出有用的警告或错误。
【解决方案2】:

已解决: 我的一个函数中有一个小错误(永远记得初始化变量;))。 _tWinMain() 正因为如此。现在一切正常,如上所述,静态库中的入口点。谢谢大家的帮助,很抱歉打扰你:)

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多