debugging - 无法通过 Visual Studio 调试 PowerShell

标签 debugging visual-studio-2010 powershell

我正在开发一个二进制 PowerShell 模块。我已经设置了模块项目的调试选项卡来启动 PowerShell 控制台并导入我的模块。如果我按 F5,它会按预期进行。

我遇到的问题是 Visual Studio 并没有真正“附加”到该过程中。 Modules 窗口是空的,我的断点都没有命中。

如果我手动启动 PowerShell 并附加到进程...BOOM!我可以调试。

F5ing 会比 Build+Launch+Attach 一遍又一遍更好:|

有任何想法吗?

编辑:

我发现如果我启用非托管代码调试,我会看到加载的模块。这是有道理的,因为 PowerShell.exe 是非托管的。现在的问题是,在“模块”窗口中,我所有的程序集符号状态都是“符号文件中没有 native 符号”。进程“powershell.exe”是“Native”而不是“Managed (v2.0.50727)”。看起来 VS 决定在 native 而不是在托管模式下进行调试。有什么办法可以改变这个?

最佳答案

我很久以前就解决了这个问题,不记得所有的细节,但这个技巧应该会有所帮助,希望如此。

创建文件 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.config:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

x64机器:文件也需要复制到C:\Windows\SysWOW64\WindowsPowerShell\v1.0

注意:您可能需要删除 <supportedRuntime version="v4.0.30319"/> 行以避免加载 .NET 4(另一方面,您实际上可能想要这个,例如,如果 PowerShell 即将使用 .NET 4 程序集)。

如果您在托管 PowerShell 的应用程序中使用 PowerShell,则创建类似的文件 your_app.exe.config在应用程序主目录中。

据我记得 <startup useLegacyV2RuntimeActivationPolicy="true"> 行实际上有助于 VS 调试器正常工作。

关于debugging - 无法通过 Visual Studio 调试 PowerShell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106881/

相关文章:

c# - 资源文件放在哪里?

c++ - 有没有办法在旧版 C/C++ 编译器中使用 C++ 11 线程对象

c++ - 我能告诉解决方案如何使用 C 编写此格式化数据吗

bash - 获取每个用户名的计数,作为它们的最后一个修饰符的文件数量

debugging - 将错误修复融入 Scrum 流程的最佳方法?

c++ - 生成 C++ 进程的线程转储

debugging - 如何在调试 groovy 时检查对象(eclipse 插件或其他)

启用扩展序列化调试信息的 Java 标志

powershell - 将除成功流之外的所有输出流重定向到文件

powershell - 在 PowerShell 和 cmd 中转义空格