0

我正在尝试调试 ASP.NET 应用程序。这特别困难,因为该错误仅发生在部署到生产的已发布代码中。它不能在开发或测试环境中复制。

我想通过在发生问题的代码中的特定行创建转储文件来进一步调查。但是,由于业务需求,不能随时关闭生产环境。这也是不能使用远程调试的原因。

有谁知道我如何在托管代码的某个点强制为 w3wp.exe 创建转储文件,但仍允许应用程序的其余部分正常运行?

4

2 回答 2

2

如果 web 应用程序具有访问权限并且您可以在环境中部署新代码,那么您可以使用 DbgHelp API 手动创建转储文件:

[DllImport("DbgHelp.dll", SetLastError = true)]
        static extern bool MiniDumpWriteDump(IntPtr ProcessHandle, int ProcId, IntPtr FileHandle, int DumpType, IntPtr ExcpInfo, IntPtr UserInfo, IntPtr ExtInfo);
    private static void DumpIt()
    {
        string outputFileName = "c:\\mem.dmp";

        using (FileStream stream = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite))
        {
            using (Process proc = Process.GetCurrentProcess())
            {
                MiniDumpWriteDump(proc.Handle, proc.Id, stream.SafeFileHandle.DangerousGetHandle(), (int)0x00000306, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            }
        }
    }
于 2009-07-25T19:22:25.653 回答
0

只是添加到 Frederik 的帖子中,看看 Tee 的博客,但要专注于使用 AdPlus,它是一种命令行工具,可以帮助您为正在运行的进程创建转储文件。Tess 有许多示例说明如何使用此工具收集转储文件以进行调试。

于 2009-07-25T11:27:52.423 回答