.net - 如何从生产堆栈跟踪中恢复生产线信息
问题描述
我构建了一个托管应用程序,将其部署在最终用户机器上(优化构建,没有向最终用户发送 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。
解决方案
推荐阅读
- iec61131-3 - IEC 61131-3 编程中的 SFC 步骤
- sql - oracle查询合并为一
- r - 如何在R中对双(数字)变量进行分类?我想创建一个二项式类别
- python - python - 如何通过Python对参数sigma = 1,mu = -1的两条布朗运动路径进行采样?
- sockets - 向所有人显示消息“用户正在输入...”,包括发件人,如果我正在输入消息,VUE JS 和 socket.io
- python - ValueError: no enough values to unpack (expected 8, got 7) - 忽略不满足此要求的文件 - python
- mongodb - MongoDB根据条件查询数组中的对象
- swagger - 将 swagger API 文档 (swagger.json) 解析为 Java 对象
- javascript - 为什么 appendRow 总是在 Google 脚本中向 G-sheet 写入两次?
- ios - IOS加密在Xcode11上面不同