如何在DebuggerStop事件处理程序中获取当前模块?
脚本形式PowerShell调试器的模块作用域问题
我正在开发一个以脚本形式实现的PowerShell调试器(Add-Debugger.ps1),它有特定适用场景,目前除了在脚本模块断点处停止时的部分功能外,其余均正常运行。
调试器的核心功能之一是执行用户交互式输入的命令并显示结果,但当前存在问题:这些命令并未在当前脚本模块的作用域中执行,而是在其他无关作用域运行。
如果能获取到当前模块对象(例如$module),就可以通过$module.Invoke()方法在模块作用域中调用命令,从而解决该问题,但我不清楚如何获取这个$module对象。
注意:尝试过使用
Get-Variable -Scope 1获取$ExecutionContext.SessionState.Module,但没有效果。原因是$ExecutionContext属于DebuggerStop处理程序的上下文,而非模块的父级上下文;并且Get-Variable本身也是在非模块作用域中调用的,无法获取模块内部的变量。
内容的提问来源于stack exchange,提问作者Roman Kuzmin
相关产品推荐
相关产品推荐

