作为一个刚开始学习计算机调试复杂性的人,对于我的生活,我无法理解如何在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 票数:18 已采纳

首先,您需要配置正确的符号。 符号将允许您将内存地址与函数名称匹配。 为此,您必须在计算机中创建一个本地文件夹,您将在其中存储符号的本地缓存(例如: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中跟随“main”调用“method1”然后调用“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调试的更多信息,我建议您使用以下链接:

===============>>#2 票数:3

这里有一个非常好的解释堆栈跟踪的教程:

http://www.codeproject.com/KB/debug/cdbntsd2.aspx

但是,即使有这样的教程,在没有适当的符号可用/加载的情况下解释堆栈转储也是非常困难的(或几乎不可能)。

===============>>#3 票数:2

http://support.microsoft.com/kb/315263
http://www.networkworld.com/news/2005/041105-windows-crash.html

===============>>#4 票数:0

包含您尝试阅读的堆栈示例可能会有所帮助。 一个好的建议是确保堆栈中显示的所有模块都有正确的调试符号。 这包括操作系统中模块的符号,Microsoft已将其符号服务器公之于众。

  ask by qweet translate from so

未解决问题?本站智能推荐:

1回复

无法在WinDbg中显示C#堆栈跟踪

我在C#程序中有一个句柄泄漏。 我正在尝试使用WinDbg使用!htrace进行诊断,大致如本答案所示 ,但是当我在WinDbg中运行!htrace -diff时,我看到的堆栈跟踪没有显示我的C#函数的名称(或者甚至我的.net组装)。 我创建了一个小测试程序来说明我的难度。 除“泄漏
3回复

使用C#从bluescreen转储文件中检索堆栈

我想知道是否有一种方法可以使用C#打开蓝屏故障转储+加载符号,以便检索内存堆栈。 我知道如何使用程序windbg手动完成它,所以如果有一种方法可以使用C#连接到Windbg,也可以解决问题。 有谁知道如何使用C#提取内存堆栈,或使用C#连接到Windbg? 谢谢!
2回复

WinDbg,如何在源服务器的堆栈跟踪中显示版本控制文件路径?

我将WinDbg与源服务器一起使用,以便它将在堆栈跟踪中显示源信息。 但是它显示了源的构建路径,而不是我的版本控制系统中存在的路径。 有没有办法让它显示我的版本控制系统的路径?
4回复

如何使用windbg查找堆栈跟踪中与偏移相对应的行号?

我有一个非托管C ++代码的崩溃转储。 我用Windbg打开它,设置符号路径和源路径。 跑!分析-v并获得以下堆栈跟踪 从上面的堆栈跟踪中我看不到SCEngine :: ruleUpdateLoop + 0x338的行号。 相反,我看到偏移0x338。 我猜这是某种装配偏移。
2回复

IE挂起100%CPU / Got堆栈跟踪

我有一种情况,IE7挂起访问我的网络应用程序。 基于George V. Reilly的出色建议 ,我安装了WinDbg以下载IE符号,设置Process Explorer以使用这些符号,然后使用Process Explorer获取挂起线程的堆栈跟踪。 我已粘贴下面的堆栈跟踪。 更熟悉I
2回复

Windows:在CI测试期间在发生核心转储的情况下打印stacktrace

我已经建立了我公司的Gitlab-CI持续集成系统的一部分。 我们每晚在所有平台上运行构建和测试。 在Linux和MacOS(分别为GDB和LLDB)崩溃的情况下,我设法打印了stacktrace。 我正在尝试在Windows上也这样做,但我还没找到如何... Coredump一代
3回复

在windbg中进行内核调试时无法获得完整的用户模式堆栈跟踪

我在Windows 10主机上安装了一台虚拟Windows 7 x64机器,我使用windbg 10.0.10586.567内核进行了调试。 我正在运行我自己的应用程序,我有完整的源代码和私有符号。 每当我进入并询问应用程序线程的堆栈跟踪时,当我的应用程序的某个二进制文件被“命中”时,回溯始
3回复

如何在Windbg中解决GetFrameContext失败

我正在使用完整的崩溃转储和Windbg调试.NET 4.0 Web应用程序。 我似乎能够获得所有的所有版本以匹配,但是当我尝试获得所有线程的托管堆栈跟踪时 操作系统线程ID:0x7cd4(13)子SP IP呼叫站点GetFrameContext失败:1 对于我所有的托管线程。 我
2回复

我可以在WinDbg中禁用“无法读取动态功能表条目”消息吗?

我正在使用一个程序,该程序在运行时会生成大量代码,并且似乎不会为其生成任何展开数据。 (我没有该程序的源代码;我正在为此编写一个插件。) 程序挂起时,我使用WinDbg对其进行了研究,并尝试使用~* k获取所有线程的堆栈跟踪。 除了堆栈跟踪,我还获得了页面的页面和页面(以及更多页面)消
1回复

WinDbg中“符号文件”的含义是什么?

我必须从堆栈跟踪WPDEV了解我的应用程序崩溃。 我跟踪了此链接,但不理解第6步“符号文件路径”。 那是什么? 谢谢。