小编Zar*_*rat的帖子

如何从minidumps中提取堆栈跟踪?

我有一大堆minidump,它们是在应用程序运行期间通过MiniDumpWriteDump记录的.minidump是在具有与我的开发机器不同的操作系统版本的机器上创建的.

现在我正在尝试编写一个程序,使用dbghelp.dll从minidump中提取堆栈跟踪.我正在走MINIDUMP_MODULE_LIST并调用SymLoadModule64,但是无法从公共符号服务器下载pdbs(kernel32等).如果我在符号路径中添加"C:\ Windows\System32",它会找到dll并下载符号,但当然它们与minidump中的dll不匹配,因此结果没用.

那么如何告诉dbghelp.dll下载并使用正确的pdbs?

[编辑]

我忘了声明SymLoadModule64只接受文件名而没有版本/校验和信息,所以很明显只有SymLoadModule64,dbghelp无法找出要下载的pdb.

这些信息实际上在MINIDUMP_MODULE_LIST中可用,但我不知道如何将其传递回dbghelp API.

有一个SymLoadModuleEx,它需要额外的参数,但我不知道这是我需要的,或者我应该传递给其他参数.

[编辑]

到目前为止没有运气,但我注意到在调试SDK中还有dbgng.dll与dbghelp.dll一起分发.MSDN看起来很好,并说它与windbg使用的引擎相同.也许我可以使用它来提取堆栈跟踪.

如果有人能指出我使用dbgeng.dll处理可能有用的minidumps的一些介绍,因为MSDN只记录单个组件,但不记录它们如何一起工作.

windows debugging minidump crash-dumps dbghelp

8
推荐指数
1
解决办法
4245
查看次数

在 WinRT/UWP 中创建自定义虚拟化控件

在 WPF 中,FrameworkElement派生类可以通过AddVisualChild. 通过这种方式,可以实现您自己的虚拟化控件,这些控件仅生成可见的子项。您也可以在没有支持集合的情况下生成子项。

我想使用这种技术将几个控件从 WPF 移植到 Windows 10 UWP,但不清楚如何在 WinRT UI 中正确实现虚拟化。因为在我对问题的原始版本的评论中指出,询问实现技术对于 Stack Overflow 来说太笼统了,所以我创建了一个简约的示例来解释我试图涵盖的关键功能,它们是

  • 从数据模型动态生成子控件
  • 为生成的子控件执行自定义布局逻辑

我做了以下考虑:

  • 据我所知,自定义控件不可能像在 WPF 中那样管理自己的子控件
  • 我排除了Panel子类,因为当我的自定义控件(由其他人)使用时,很容易出错。面板子项应该由包含的 XAML 控制,而不是由面板控制。
  • 我排除了ItemsControl子类,因为不可能提供支持集合(数据虚拟化是必需的)

(请注意,排除它们可能是错误的,所以如果是,请指出。)

以下 WPF 代码创建了一个无限滚动的日期带,但只具体化当前可见的单元格。我有意将它保持得尽可能简约,因此没有多大意义,但它确实提供了我上面提到的两个关键功能,我需要了解如何在 WinRT 中实现。

所以我的问题是:是否可以在 WinRT 中创建这样一个控件,它动态地构建其子项以显示无限滚动带?请记住,它需要是自包含的,以便放置在任意页面上,而页面不必包含其他代码(否则它终将不是可重用的控件)。

如果您已经知道如何实现虚拟化并且可以给我一些提示,我会认为它足以概述如何在 WinRT 中完成它。

WPF 来源:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

namespace Sandbox
{
    public class DateBand : FrameworkElement
    {
        public static readonly DependencyProperty ScrollOffsetProperty = DependencyProperty.Register(
            nameof(ScrollOffset), typeof(double), typeof(DateBand), new …
Run Code Online (Sandbox Code Playgroud)

c# winrt-xaml windows-store-apps uwp

6
推荐指数
1
解决办法
1869
查看次数

Java相当于未捕获异常的coredump

什么是Linux coredump或Windows minidump的Java等价物?我已经阅读了堆转储,它看起来像我想要的,但是如何在未捕获的异常上(自动)触发它们?

我知道未捕获的异常处理程序,我已经用它来打印异常+堆栈跟踪并终止整个应用程序(否则线程死了,应用程序继续运行?呵呵?)另外我发现这篇文章关于如何记录堆从代码转储,但如果我从未处理的异常处理程序执行此操作,Java已经捕获了异常并且堆栈跟踪(和参数)消失了.

我遇到了-XX:+HeapDumpOnOutOfMemoryError似乎做我需要的旗帜,不幸的是只是因为内存异常,而不是其他未被捕获的异常.

到目前为止,这是我唯一能够摆脱谷歌的事情.目前我正在使用带有异常断点的附加调试器,但这是不切实际的,因为它还会中断处理的异常,因此无法在无人监督的情况下使用它.

[动机更新]

我希望能够检查堆栈跟踪的参数和局部变量,以找出导致异常的原因.它通常是空引用异常或断言失败,我不能总是从行号中猜出究竟出了什么问题.在C/C++中,我习惯于使用coredump/minidump崩溃,然后进一步检查实际导致崩溃的原因.

java error-handling crash-dumps

5
推荐指数
1
解决办法
1497
查看次数