当前位置:  开发笔记 > 运维 > 正文

解释Windows Minidumps中的堆栈

如何解决《解释WindowsMinidumps中的堆栈》经验,为你挑选了1个好方法。

作为刚刚开始学习计算机调试复杂性的人,对于我的生活,我无法理解如何在Windbg中读取转储的堆栈文本.我不知道从哪里开始如何解释它们或如何解决它.谁能为这个可怜的灵魂提供方向?

即(实际上我手边唯一的转储)

>b69dd8f0 bfa1e255 016d2fc0 89efc000 00000040 nv4_disp+0x48b94

b69dd8f4 016d2fc0 89efc000 00000040 00000006 nv4_disp+0x49255

b69dd8f8 89efc000 00000040 00000006 bfa1dcc0 0x16d2fc0

b69dd8fc 00000000 00000006 bfa1dcc0 e1e71018 0x89efc000

我知道问题与Nvidia显示驱动程序有关,但我想知道的是如何实际读取堆栈(例如,什么是b69dd8f4?): - [



1> sachaa..:

首先,您需要配置正确的符号.符号将允许您将内存地址与函数名称匹配.为此,您必须在计算机中创建一个本地文件夹,您将在其中存储符号的本地缓存(例如:C:\ symbols).然后,您需要指定符号服务器路径.要执行此操作,请转到:文件>符号文件路径并键入:

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

您可以在此处找到有关如何正确配置符号的更多信息.

正确配置Symbols服务器后,您可以从以下位置打开minidump:File> Open Crash Dump.

一旦minidump打开,它将在命令行的左侧显示生成转储时正在执行的线程.如果你想看看这个线程正在执行什么类型:

kpn 200

这可能需要一些时间才能执行它,因为它必须首次下载必要的公共Microsoft相关符号.下载完所有符号后,您将获得以下内容:

01 MODULE!CLASS.FUNCTIONNAME1(...)
02 MODULE!CLASS.FUNCTIONNAME2(...)
03 MODULE!CLASS.FUNCTIONNAME3(...)
04 MODULE!CLASS.FUNCTIONNAME4(...)

哪里:

第一个号码:表示帧号

MODULE:包含代码的DLL

CLASS :(仅限C++代码)将显示包含代码的类

FUNCTIONAME:被调用的方法.如果您有正确的符号,您还会看到参数.

你可能也会看到类似的东西

01 MODULE!+989823

这表示您没有此DLL的正确符号,因此您只能看到方法偏移量.

那么,什么是callstack?

想象一下,你有这个代码:

void main()
{
  method1();
}

void method1()
{
  method2();
}

int method2()
{
  return 20/0;
}

在这个代码中,方法2基本上会抛出异常,因为我们试图除以0,这将导致进程崩溃.如果我们在发生这种情况时得到一个minidump,我们会看到以下callstack:

01 MYDLL!method2()
02 MYDLL!method1()
03 MYDLL!main()

你可以从这个callstack中跟随那个名为"method1"的"main"然后调用"method2"并且它失败了.

在你的情况下,你有这个callstack(我猜是运行"kb"命令的结果)

b69dd8f0 bfa1e255 016d2fc0 89efc000 00000040 nv4_disp+0x48b94
b69dd8f4 016d2fc0 89efc000 00000040 00000006 nv4_disp+0x49255
b69dd8f8 89efc000 00000040 00000006 bfa1dcc0 0x16d2fc0
b69dd8fc 00000000 00000006 bfa1dcc0 e1e71018 0x89efc000

第一列表示子帧指针,第二列表示正在执行的方法的返回地址,接下来的三列显示传递给方法的前3个参数,最后一部分是DLL名称(nv4_disp)和正在执行的方法的偏移量(+ 0x48b94).由于您没有符号,因此无法看到方法名称.我怀疑NVIDIA是否可以公开访问他们的符号,所以我猜你不能从这里获得太多信息.

我建议你运行"kpn 200".这将显示完整的callstack并且您可能能够看到导致此崩溃的方法的来源(如果它是Microsoft DLL,您应该在我提供的步骤中具有正确的符号).

至少你知道它与NVIDIA错误有关;-)尝试将此驱动程序的DLL升级到最新版本.

如果您想了解有关WinDBG调试的更多信息,我建议您使用以下链接:

如果它被破坏了,你应该修理它

TechNet网络广播:Windows挂起和崩溃转储分析

Delicious.com上的热门链接WinDBG

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有