Debugging metro应用程序的调试器是如何工作的?

Debugging metro应用程序的调试器是如何工作的?,debugging,winapi,windows-8,windows-runtime,Debugging,Winapi,Windows 8,Windows Runtime,因此,基本上,我对调试器的琐碎研究让我发现,调试器的工作原理是围绕原始流程创建一个包装器,流程在包装器中运行(不适用于调试器附加到已经运行的流程的场景)。那么metro应用程序是如何工作的呢?Metro应用程序只能在安装时分配给它们的应用程序容器内运行(实际上Metro应用程序不是真正意义上的安装),并且应用程序容器和Metro应用程序之间的映射记录在注册表项中。(全部来自我的研究,不知道如何正确,如果我错了,请纠正我)。那么调试器是否也在同一个应用程序容器中运行 编辑:关于我为什么想学习这个的

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


编辑:关于我为什么想学习这个的驱动力的简短说明。我被困住了。因此,我在想,如果我可以通过将桌面应用程序作为调试器(或者自动化调试器,drats,这变得更加可怕)并使用DebugBreak(从metro应用程序内部)和Continue语句(从伪调试器应用程序)模拟metro应用程序和桌面应用程序之间的通信来实现IPC

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

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

韩的答案是正确的。对于Metro风格的应用程序,我们引入了一个新功能,允许您启动挂起的应用程序,我们将使用命令行选项启动已注册的调试器,以指示要附加到哪个进程。有关此功能的信息,请参阅,或查看项目以了解示例用法。我不确定,但是这个API可能有开发者许可限制


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

韩的回答是正确的。对于Metro风格的应用程序,我们引入了一个新功能,允许您启动挂起的应用程序,我们将使用命令行选项启动已注册的调试器,以指示要附加到哪个进程。有关此功能的信息,请参阅,或查看项目以了解示例用法。我不确定,但是这个API可能有开发者许可限制


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

好吧,所以我可能听起来很愚蠢,但这只是绝望的程度。我可以使用SE_DEBUG的概念来实现这一点吗?我的意思是用SE_DEBUG和DebugBreak和Continue语句编写桌面应用程序,模拟某种IPC?(请不要因为这一评论而投反对票,但研究调试器工作背后的驱动力仅仅是这一点)你是对的,如果你事先知道这一点,我就不会给出答案。我怀疑有问题,当你开发一个可能会影响进程安全配置的应用程序时,会添加一个特定的注册表项。到目前为止,最大的问题是你不能再调试你的应用程序了,Windows只允许一个进程作为调试器连接。不允许多个调试器是有道理的。任何比这更干净的黑客,如果你可能会建议。好吧,所以我可能听起来很愚蠢,但这只是绝望的程度。我可以使用SE_DEBUG的概念来实现这一点吗?我的意思是用SE_DEBUG和DebugBreak和Continue语句编写桌面应用程序,模拟某种IPC?(请不要因为这一评论而投反对票,但研究调试器工作背后的驱动力仅仅是这一点)你是对的,如果你事先知道这一点,我就不会给出答案。我怀疑有问题,当你开发一个可能会影响进程安全配置的应用程序时,会添加一个特定的注册表项。到目前为止,最大的问题是你不能再调试你的应用程序了,Windows只允许一个进程作为调试器连接。不允许多个调试器是有道理的。任何比这更干净的黑客,如果你可以建议。