【问题标题】:CLR crash only when run from a PowerShell job - how to diagnose仅当从 PowerShell 作业运行时 CLR 崩溃 - 如何诊断
【发布时间】:2011-03-28 17:37:55
【问题描述】:

我有一个 .NET 程序,它在 CLR JIT 中崩溃,出现内部堆栈溢出和内存不足错误,仅在运行时从 PowerShell 作业内部

我假设将其作为 powershell 作业运行会施加某种资源或安全限制,从而导致 .NET CLR 发疯。

我能得到的最明确的线索是,其中一个错误曾经表现为 HRESULT 的异常,HRESULT 是 ERROR_COMMITMENT_LIMIT(页面文件已用尽),尽管页面文件和内存。其他时候,这些错误发生在程序的完全任意和无辜的地方。

我如何诊断到底出了什么问题,违反了哪些限制?是否有 API 可以获取流程所受的所有限制?或者有没有办法拦截或记录因安全或配额限制而失败的 WinAPI 调用?我什至可以使用 WinDbg 来完成这项任务,但我不知道如何使用它来完成这项任务。

【问题讨论】:

标签: .net windows security winapi debugging


【解决方案1】:

PowerShell 在这里不太可能直接出错。它不强加任何安全或 CLR 修改,这些修改会传递给它创建的子进程。

PowerShell 肯定会传递给子进程的一项是环境变量。很可能 PowerShell 传递的环境变量与 CMD 不同,这会影响 CLR 或您的程序并导致其崩溃。我会启动一个 CMD 和 PowerShell 会话并比较它们的环境变量以排除这是一个原因。

我会特别注意%PATH% 变量。

【讨论】:

  • 嗯 - 我相信 PowerShell 没有施加安全限制是不正确的。 IIRC,例如默认情况下,远程 Powershell 作业减少了网络权限。但是,查看环境变量是个好主意。
  • @jkff 我的意思更多的是默认的 PowerShell 环境。如果 OP 使用的是自定义 PS 环境,我希望他们能对此发表评论:)。尽管权限减少,但我不知道网络作业。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2015-07-02
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2014-01-31
  • 2015-10-06
相关资源
最近更新 更多