【问题标题】:How does a debugger work for metro apps?Metro 应用程序的调试器如何工作?
【发布时间】:2012-06-22 05:37:17
【问题描述】:

所以基本上我对调试器的琐碎研究导致我发现调试器的工作原理是围绕原始进程创建一个包装器,并且该进程在包装器内运行。(不是在调试器附加到已经运行的进程的情况下)。那么它是如何用于 Metro 应用程序的呢? Metro 应用程序只能在安装时分配给它们的应用程序容器内运行(实际上并未安装真正意义上的 Metro 应用程序),并且应用程序容器和 Metro 应用程序之间的映射记录在注册表项中。 (全部来自我的研究,不知道如何正确,如果我错了请纠正我)。那么调试器是否也在同一个应用容器中运行?

编辑:关于我想学习这个的驱动力的简短说明。我被this 困住了。所以我在想我是否可以通过将桌面应用程序作为调试器来实现这个 IPC(或者自动化调试器,这变得更加令人毛骨悚然)并使用 DebugBreak 模拟 Metro 应用程序和桌面应用程序之间的通信(从 Metro 应用程序内部) 和 Continue 语句(来自伪调试器应用程序)

【问题讨论】:

    标签: debugging winapi windows-8 windows-runtime


    【解决方案1】:

    “包装器”的心理形象是错误的。调试器只是一个单独的进程,它使用内置的 Windows 支持进行调试。它具有 SE_DEBUG 权限,由具有普通桌面应用程序权限的应用程序启动。像 Visual Studio。所以它不会在 AppContainer 本身内部运行。

    【讨论】:

    • 好吧,我可能听起来非常愚蠢,但这只是绝望的程度。我可以使用SE_DEBUG的概念来实现stackoverflow.com/questions/11135994/…这个吗?我的意思是使用 SE_DEBUG 编写桌面应用程序,并以某种方式使用 DebugBreak 和 Continue 语句模拟某种 IPC? (祈祷不要对此评论投反对票,但研究调试器工作背后的驱动力仅此而已)
    • 你是对的,如果你能提前回答这个问题,我就不会发布答案。我怀疑麻烦,当您开发一个可能会影响进程安全配置的应用程序时,会添加一个特定的注册表项。到目前为止,最大的问题是您无法再调试您的应用程序,Windows 只允许一个进程作为调试器附加。
    • 不允许多个调试器是有意义的。如果您可以建议,任何比这个更干净的黑客。
    【解决方案2】:

    韩的回答是正确的。对于 Metro 风格的应用程序,我们引入了一项新功能,允许您启动暂停的应用程序,我们将使用命令行选项启动已注册的调试器以指示要附加到的进程。有关此功能的信息,请参阅IPackageDebugSettings API,或查看http://winrt.codeplex.com 项目以获取示例用法。我不确定,但此 API 可能存在开发者许可限制。

    关于您在 Metro 风格应用程序和桌面应用程序之间支持 IPC 的初衷 - 正如链接线程所述,这是不受支持的。

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多