首页 > 解决方案 > 如何从生产堆栈跟踪中恢复生产线信息

问题描述

我构建了一个托管应用程序,将其部署在最终用户机器上(优化构建,没有向最终用户发送 PDB)。PDB 文件由 CI 存储在文件共享中。

在最终用户发生异常后,我收到带有 IL 偏移量的堆栈跟踪的错误报告。对于大多数错误,这足以诊断问题。但是,对于某些例外情况,使用 IL 偏移量来找出更多关于确切问题发生的位置(行号)会非常有用。这可能吗?pdb2xml 工具似乎很难找到,而且不只是将 pdb “反编译”为 xml,而是需要一个 dll 并尝试查找符号(从哪里我不知道),这不是真的我想在这种情况下做。

System.Exception: [Dummy exception]
   at MyApp.UI!0x0600a7f5!MyApp.UI.MainForm.ThrowDummyException(object sender, EventArgs args) +0x26
   at System.Windows.Forms!0x06003fdb!System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) +0x15
   at System.Windows.Forms!0x06004131!System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) +0x1e
   at System.Windows.Forms!0x06003f9a!System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) +0x42
   at System.Windows.Forms!0x06003fa3!System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) +0xcb
   at System.Windows.Forms!0x06003baa!System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) +0x6f
   at System.Windows.Forms!0x06003dbd!System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea) +0x7
   at System.Windows.Forms!0x06000efe!System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) +0x184
   at System.Windows.Forms!0x06000f0e!System.Windows.Forms.Control.WndProc(Message& m) +0x49f
   at System.Windows.Forms!0x06003bdf!System.Windows.Forms.ToolStrip.WndProc(Message& m) +0xe7
   at System.Windows.Forms!0x06003ddd!System.Windows.Forms.ToolStripDropDown.WndProc(Message& m) +0x78
   at System.Windows.Forms!0x06002dec!System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) +0x25 

相关问题:如何在最终用户的机器上创建转储?是否有 Windows API 或实用程序随 Windows 一起提供,或者可以很容易地与应用程序捆绑在一起来执行它?在最终用户的机器上附加调试器或要求用户安装单独的实用程序不是一种选择。

可以通过右键单击任务管理器中的程序来创建小型转储,因此似乎无需安装任何其他东西就可以做到!如果我确实设法获得了客户转储文件,我将如何在本地机器上调试它?那时加载的模块是 .ni.dll 的,我没有 .ni.pdbs,只有原始的 PDBs。ni.dll 文件是在用户机器上生成的(例如使用 NGen),但很明显,当程序集经过 NGen 处理时,不存在 PDB。

标签: .netdebugging

解决方案


推荐阅读