我正在编写一个调试器扩展,并正在寻找一种在扩展开始执行后从调试器扩展获取用户输入的方法。
我在调试器扩展中托管PowerShell,并尝试实现对Read的支持,这需要用户的输入。
例如,在调试器中,我可以用PSExt_profile.ps1:function Foo{ Read-Host -Prompt "Enter your address" }编写一个脚本
在调试器命令行上:!ps Foo
它将调用运行Read命令的PowerShell。
我不明白如何从扩展请求从WinDbg获得输入。在cdb中,我可以使用控制台函数。
是否有一种通用的方法来处理这个与加载扩展的调试器无关的问题?
发布于 2016-01-14 20:45:17
我编写了一个调试器扩展,它在大约5年前托管了PS。它是专门为Windbg设计的,因为已经有了KD和CDB的解决方案(我认为它们只是将stdin和stdout重定向到驱动程序PS脚本中)。因为代码是我工作的公司拥有的,所以我通过查看API来回答。我看到IDebugControl4 4::InputWide是一个输入方法。
该方法的文档建议您“使用输入和输出”。这个话题谈论的是IDebugInputCallbacks。如果你还没有读过这个话题,建议你读一读。
这些API在调试引擎中,因此在使用该引擎的所有调试器中都应该是通用的。
最后,我们编写了一个PS主机,它使用各种调试引擎API进行输入/输出。我们还连接了Windbg中输入窗口的WinProc,以便完成选项卡。这允许输入PS和Windbg命令,并在输入窗口中完成选项卡。这两个命令集之间只有几个命令重叠。ls就是其中之一。因此,我们有了一个转义机制,类似于命令开头的一个额外空间来处理重叠。
顺便说一句,如果你对合作感兴趣,请告诉我。我在公司的角色在我们有了alpha-ish级代码后不久发生了变化,所以从来没有真正看到这一点。我一直想回到它(并让我的公司开源它),但没有。
https://stackoverflow.com/questions/34799065
复制相似问题