windbg

ASP.NET Hang - Generic Dictionary concurrency issues causes GC deadlock

淺唱寂寞╮ 提交于 2019-11-29 07:12:29
问题 In the last month our ASP.NET web app has stopped responding to requests and we have had to reset the app pool to get it back up. We are having trouble identifying the exact cause of the issue, as there are no errors in the server's event log. The site simply stops responding. So we have been using WinDbg to try and analyse a memory dump taken when the site was not responding with the help of Tess Ferrandez's blog entries: GC Hangs & High CPU Hang By running !threadpool I can see the

Failed to load data access DLL, 0x80004005

ぐ巨炮叔叔 提交于 2019-11-29 06:47:35
问题 0:025> !pe Failed to load data access DLL, 0x80004005 Verify that 1) you have a recent build of the debugger (6.2.14 or newer) 2) the file mscordacwks.dll that matches your version of mscorwks.dll is in the version directory 3) or, if you are debugging a dump file, verify that the file mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path. 4) you are debugging on the same architecture as the dump file. For example, an IA64 dump file must be debugged on an IA64 machine. You can also

WinDbg常用命令系列---单步执行p*

瘦欲@ 提交于 2019-11-29 06:29:27
p (Step) p命令执行单个指令或源代码行,并可选地显示所有寄存器和标志的结果值。当子例程调用或中断发生时,它们被视为单个步骤。 用户模式: [~Thread] p[r] [= StartAddress] [Count] ["Command"] 内核模式: p[r] [= StartAddress] [Count] ["Command"] 参数: Thread 指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。 r 打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用 rm (Register Mask) 命令。 dǎ 打 kāi 开 hé 和 guān 关 bì 闭 jì 寄 cún 存 qì 器 hé 和 biāo 标 zhì 志 de 的 xiǎn 显 shì 示 。 mò 默 rèn 认 qíng 情 kuàng 况 xià 下 , jiāng 将 xiǎn 显 shì 示 jì 寄 cún 存 qì 器 hé 和 biāo 标 zhì 志 。 kě 可 yǐ 以 shǐ 使

WinDbg常用命令系列---显示局部变量dv

蹲街弑〆低调 提交于 2019-11-29 06:20:34
dv (Display Local Variables) dv命令显示当前作用域中所有局部变量的名称和值。 dv [Flags] [Pattern] 参数: Flags 显示其他信息。可以包括以下任何区分大小写的标志: /f <addr>:允许您指定任意函数地址,以便可以查看任何代码的参数和局部变量。它关闭值显示并暗示/v。/f标志必须是最后一个标志。如果字符串被引用,参数筛选模式仍然可以在其后面指定。 /i : 使显示器指定变量的类型:局部、全局、参数、函数或未知。 /t : 使显示包含每个局部变量的数据类型。 /v : 使显示包括每个局部变量的虚拟内存地址或寄存器位置。 /V :与/v相同,还包括相对于相关寄存器的局部变量的地址。 /a: 按地址按升序对输出进行排序。 /A :按地址按降序对输出进行排序。 /n : 按名称按升序对输出进行排序。 /N : 按名称按降序对输出进行排序。 /z : 按大小按升序对输出进行排序。 /Z:按大小降序排列输出。 Pattern 使命令只显示与指定模式匹配的局部变量。模式可能包含各种通配符和说明符;如果模式包含空格,则必须用引号括起来。如果省略pattern,则将显示所有局部变量。 在详细模式下,也会显示变量的地址。(这也可以使用 x (Examine Symbols) 命令完成。)数据结构和不熟悉的数据类型不会完整显示

WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS

陌路散爱 提交于 2019-11-29 06:02:59
dg (Display Selector) dg命令显示指定选择器的段描述符。 dg FirstSelector [LastSelector] 参数: FirstSelector 指定要显示的第一个选择器的十六进制选择器值。 LastSelector 指定要显示的最后一个选择器的十六进制选择器值。如果省略,则只显示一个选择器。 此命令最多只能显示256个选择器。常用选择器值为: ID 十进制 十六进制 KGDT_NULL 0 0x00 KGDT_R0_CODE 8 0x08 KGDT_R0_DATA 16 0x10 KGDT_R3_CODE 24 0x18 KGDT_R3_DATA 32 0x20 KGDT_TSS 40 0x28 KGDT_R0_PCR 48 0x30 KGDT_R3_TEB 56 0x38 KGDT_VDM_TILE 64 0x40 KGDT_LDT 72 0x48 KGDT_DF_TSS 80 0x50 KGDT_NMI_TSS 88 0x58 dl (Display Linked List) dl命令显示 LIST_ENTRY or SINGLE_LIST_ENTRY列表。 dl[b] Address MaxCount Size 参数: b 如果包含此项,则按相反顺序转储列表。这不能与SINGLE_LIST_ENTRY条目一起使用。 Address

Symbol issue when debugging C# code

杀马特。学长 韩版系。学妹 提交于 2019-11-29 05:23:11
I am using WinDbg to load a crash dump from managed code (C#, a console application built for Any CPU ), and a crash dump is created on a x64 platform. I am debugging on a x64 platform. I have put the related PDB file into the symbol path. But WinDbg always find the symbol from a strange folder. Here is an example (when I got from using !sym noisy): SYMSRV: c:\MySymbols\FooService.pdb\4311207E2E2D442CB7473828D2488F941\FooService.pdb not found My application is called FooService.exe and the related PDB file is named FooService.pdb . I have set C:\MySymbols as the symbol path and copied

WinDbg常用命令系列---内存查看d*

馋奶兔 提交于 2019-11-29 04:33:49
d*命令显示给定范围内的内存内容。 d{a|b|c|d|D|f|p|q|u|w|W} [Options] [Range] dy{b|d} [Options] [Range] d [Options] [Range] 参数: Options 指定一个或多个显示选项。可以包括以下任何选项,但不能指示多个/p*选项: /c Width :指定要在显示中使用的列数。如果省略此选项,则默认列数取决于显示类型。 /p :(仅限内核模式)使用物理内存地址进行显示。范围指定的范围将从物理内存而不是虚拟内存中获取。 /p[c] :(仅限内核模式)与/P相同,只是将读取缓存内存。必须包括c周围的括号。 /p[uc] :(仅限内核模式)与/P相同,只是将读取未缓存的内存。必须包括uc周围的括号 /p[wc] :(仅限内核模式)与/P相同,但写入组合内存将被读取。wc周围的支架必须包括在内。 Range 指定要显示的内存区域。如果省略范围,命令将显示从最后一个显示命令结束位置开始的内存。如果省略了范围并且没有使用以前的显示命令,则显示将从当前指令指针开始。 显示的每一行将包括行中第一个字节的地址,后面是该位置和后面位置的内存内容。如果省略范围,命令将显示从最后一个显示命令结束位置开始的内存。这允许您连续扫描内存。此命令的形式如下。dd、dD、dw和dW命令的第二个字符区分大小写

WinDbg Dr. Watson minidump - requires pdb/dll originally built for installed version?

情到浓时终转凉″ 提交于 2019-11-29 02:42:05
I have a mindmp file from a target's application crash. Is it possible for me to rebuild the dll/pdb files for a version of software and have windbg load symbols correctly? My problem is that our pdb files are only kept for major releases (unfortunately). This is a daily build, which I can rebuild myself, but I'm getting tripped up on errors. With !sym noisy on: "image header does not match memory image header." DBGENG: C:\...\XXX.dll image header does not match memory image header. DBGENG: XXX.dll - Partial symbol image load missing image info DBGHELP: Module is not fully loaded into memory.

WinDbg常用命令系列---?

风格不统一 提交于 2019-11-29 01:57:12
? (Command Help) 问号(?)字符显示所有命令和运算符的列表。问号本身显示命令帮助。 环境 模式 用户模式下,内核模式 目标 实时、 崩溃转储 平台 全部 0:000> ? Open debugger.chm for complete debugger documentation B[C|D|E][<bps>] - clear/disable/enable breakpoint(s) BL - list breakpoints BA <access> <size> <addr> - set processor breakpoint BP <address> - set soft breakpoint D[type][<range>] - dump memory DT [-n|y] [[mod!]name] [[-n|y]fields] [address] [-l list] [-a[]|c|i|o|r[#]|v] - dump using type information DV [<name>] - dump local variables DX [-r[#]] <expr> - display C++ expression using extension model (e.g.: NatVis) E[type] <address> [<values>] -

How to list call stack of all managed threads using WinDBG?

倾然丶 夕夏残阳落幕 提交于 2019-11-29 01:42:49
问题 I have a dump created from a managed application. I am using SOS/SOSEX extentions to ease my dump analysis. I'd like to list down the call stack of all managed threads as we do ~*kb with native applications. How do we do that? 回答1: Use the sos !EEStack command: 0:007> .load sos 0:007> !EEStack See SOS.dll (SOS Debugging Extension) 回答2: This command will dump all managed threads ~*e!dumpstack 回答3: with sosex, use ~*e!mk (~ - thread, * - all, e - execute this command, !mk - display managed