【问题标题】:Find URL from call stack with WinDBG使用 WinDBG 从调用堆栈中查找 URL
【发布时间】:2016-02-03 21:38:46
【问题描述】:

我在转储文件中间歇性收到浏览器挂起并出现此错误。

在 3 次崩溃中使用 !analyze -v 后,我收到此错误并堆栈

GetUrlPageData2 (WinHttp) failed: 12007.

但是,我永远无法在我的转储文件中找到失败的 URL。有人可以帮忙吗?

STACK_TEXT:  
0029e8fc 5ffce1fd 74ce1450 00000000 00000000 user32!NtUserWaitMessage+0x15
0029e960 5ffd5f2c 00000001 0070fab0 00000000 ieframe!CBrowserFrame::FrameMessagePump+0x52e
0029e9a8 5ffd64e4 00000000 74ce1450 00708618 ieframe!BrowserThreadProc+0xf8
0029e9c8 5ffd6441 00708618 00000000 00708618 ieframe!BrowserNewThreadProc+0x88
0029fa38 5ffd62b2 00708618 00000000 76655528 ieframe!SHOpenFolderWindow+0x109
0029fa5c 5ffd61b1 006e4188 00000001 00000000 ieframe!IEWinMainEx+0x204
0029fa78 5ffd6120 006e4188 00000001 00000000 ieframe!IEWinMain+0x77
0029fab0 00c32fdb 006e4188 00000001 01000000 ieframe!LCIEStartAsFrame+0x265
0029fc04 00c312a2 00c30000 00000000 006a21cc iexplore!wWinMain+0x3b2
0029fc98 74ce33aa 7efde000 0029fce4 77159ef2 iexplore!_initterm_e+0x1b1
0029fca4 77159ef2 7efde000 77f3a412 00000000 kernel32!BaseThreadInitThunk+0xe
0029fce4 77159ec5 00c31b0a 7efde000 00000000 ntdll!__RtlUserThreadStart+0x70
0029fcfc 00000000 00c31b0a 7efde000 00000000 ntdll!_RtlUserThreadStart+0x1b

如何在此堆栈中找到失败的 URL?

【问题讨论】:

  • 欢迎使用 Stack Overflow。请尝试很好地格式化您的帖子,以便于阅读和理解。我现在为你做了这个,所以你可以看看它的样子。
  • 对于解决方案,请在 MSDN 上记录的调用堆栈中找到方法,查找方法的参数并对指向 URL 的参数执行 dadu .像这样可以工作:IELaunchURL。我对 IE 不太熟悉,但在你的情况下,我会说带有 URL 的方法调用是很久以前调用的,并且不再在调用堆栈上。尝试使用 SysInternals Strings 之类的字符串搜索工具搜索 http(s)://。它可能会给你很多误报。
  • GetUrlPageData2 (WinHttp) failed: 12007. 不是导致崩溃的原因,windbg 尝试使用查询提取 watson 数据并失败,这就是它所指示的字符串,您的崩溃在该堆栈的其他位置您显示的是正在等待消息,似乎也不是崩溃线程
  • 感谢您清理 Thomas。 blabb:就您的观点而言,您说它似乎不是崩溃线程,但调试器将其识别为带有 .螺纹旁边的符号。当我通过堆栈时,没有任何意义。如果我做一个直流内存地址,它就变成了那个地址的一堆垃圾,没有任何意义。

标签: windows debugging internet-explorer-8 windbg postmortem-debugging


【解决方案1】:

GetUrlPageData2 (WinHttp) 失败:12007 与崩溃没有任何关系。

Windbg 尝试从 Microsoft 服务器中提取 Watson 数据,但未能提取,因此它显示的错误字符串仅供参考

被提取的数据是当应用程序崩溃时询问do you want to send this to Microsoft_xxxx 的对话框时,世界各地的不同用户发送到 Microsoft 服务器的数据

当您使用 !analyze -v 时,如果存在数据可能有助于 Windbg 提供更好的崩溃分析

错误代码 12007 是 ERROR_WINHTTP_NAME_NOT_RESOLVED 如果您在本地安装了 sdk 或参考 winhttp_errorcodes

,则可以找到在 winhttp.h 中定义的 Winhttp 错误列表

如果你愿意的话,你可以使用 .dbgdbg 来调试调试器并在 ext!GetUrlPageData2 上设置断点并使用 da Poi(@esp+4)

GetPageUrlData failed, server returned HTTP status 404

URL requested: http://watson.microsoft.com/StageOne/FoxitReader_exe/7_2_8_1124/56551ff4/FoxitCloud_fpi/3_7_139_918/55fbbee5/c0000005/0006b97a.htm?Retriage=1

您发布的堆栈似乎没有包含有关它似乎正在等待对象的崩溃的任何详细信息

【讨论】:

  • 我害怕这个答案。我做了一个 !analyze -v hang 并给出了完全不同的答案。我认为你是对的,因为它在堆栈中发布的 URL 来自 watson。我无法弄清楚为什么这个浏览器会间歇性地挂起。堆栈没有提供足够的信息。
  • 您可以使用 sysinternals 中的 procdump 来监控进程是否挂起并让它创建一个转储文件。
  • 任务管理器和sysinternals的procdump有什么区别?
  • 大部分时间点将进行转储并确保转储的正确位数。您可以在 procdump 旁边运行 procmon 并尝试将该时间点与 procmon 中的请求相匹配。另一种选择是使用 WPR 和 WPA。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2016-04-26
  • 2016-01-12
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多