问题标签 [windbg]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - 最大的windbg宠物烦恼
与微软的 windbg 调试器有关的最大烦恼是什么?
(注意:如果我忽略未抛光的 UI,我实际上真的很喜欢 windbg。)
windbg - 将 WinDbg 添加到 .DMP 文件的“打开方式”菜单?
目前,当我右键单击 .DMP(或 .MDMP)文件时,“打开方式”弹出窗口上有 Visual Studio 2005 和 2008。如何在不删除任何 Visual Studio 选项的情况下将 WinDbg 添加到此列表?
我使用了“选择程序”选项,这会将 WinDbg 添加到列表中。不幸的是,WinDbg 需要一些命令行选项来打开 .DMP 文件,而我在注册表中找不到这个条目,所以我没有什么可编辑的。
delphi - 在非开发环境中调试 Delphi 应用程序
我正在尝试使用 WinDBG 或其他调试器在远程机器上调试 CodeGear Delphi 2007 Windows 应用程序。我一直无法为 WinDBG 生成符号文件。
有没有办法使用 WinDBG 或其他调试器在不包含 IDE 的系统上调试 Delphi 应用程序?
编辑1
远程调试器在这里不是一个选项。我可以远程访问最终用户 PC,但由于防火墙限制,我无法使用远程调试器。
编辑2
我可以远程进入机器,但由于防火墙限制,无法连接 CodeGear 远程调试器。
internet-explorer - IE 挂起 100% CPU / 得到堆栈跟踪
我遇到了 IE7 挂起访问我的网络应用程序的情况。根据George V. Reilly的出色建议,我安装了 WinDbg 来下载 IE 符号,设置 Process Explorer 以使用这些符号,然后使用 Process Explorer 获取挂起线程的堆栈跟踪。
我在下面粘贴了堆栈跟踪。更熟悉 IE 内部的人是否知道正在发生的事情,或者对如何进行此操作的建议?
multithreading - Windbg 堆栈跟踪问题
我正在调试托管代码的崩溃转储,当使用 !threads 在这里显示所有线程时,几个线程具有 Exception 字段值和各种异常。
我的问题是如何快速识别哪个异常是导致进程崩溃的根异常?为什么这么多线程与异常值相关联的任何想法 - 我认为应该只有一个线程(具有未处理的异常)导致进程崩溃,为什么这么多线程显示异常?:-)
提前谢谢,乔治
这是!threads 的一部分的输出示例,FooException 和 GooException 是我的应用程序定义的异常类型。
48 f 14c4 000000001d8bc4a0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365da0) 49 10 17e8 000000001acc26d0 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093364670) 50 11 135c 000000001acc3180 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000dd707f70) 51 12 1740 000000001aca2ec0 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000937e8a60) 52 13 814 000000001aca3970 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009336c550) 53 14 6ac 000000001accb010 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093355f58) 54 15 1114 000000001accbac0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 56 16 d44 000000001accc570 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (00000000933c0598) 58 17 ff4 000000001accd020 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException ( 00000000a8a39c48) 59 18 780 000000001accdad0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 60 19 8fc 000000001acce580 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000abd5ff08) 61 1a 2e8 000000001accf030 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000ac163ea0) 62 1b 11e8 000000001d8bd010 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093367c78) 63 1c 1520 000000001d8bd5e0 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 64 1d 1330 000000001d8be090 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException ( 00000000937d9540) 65 1e 7f8 000000001d8beb40 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009339a038) 66 1f a70 000000001d8bf5f0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000937d8b88) 67 20 150 000000001d8c00a0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 68 21 1628 000000001d8c0b50 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093355200) 69 22 1148 000000001d8c1600 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException ( 0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009380cc08)0000000000000000 0000000000162080 0 MTA FooException (0000000093355200) 69 22 1148 000000001d8c1600 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 已启用 0000000000000000:0000000000000000 0000000000162080 0 MTA Foo3008008 (000000cc09)0000000000000000 0000000000162080 0 MTA FooException (0000000093355200) 69 22 1148 000000001d8c1600 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 已启用 0000000000000000:0000000000000000 0000000000162080 0 MTA Foo3008008 (000000cc09)0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009380cc08)0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009380cc08)00000000000000000000000000000000000000162080 0 MTA FOOEXCEPTION(0000000093343A78)72 25 25 1568 000000001D8C3610 B020 B020启用000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162080CICCICTAFOO00000000000000000000000000000000000000162080 0 MTA FOOEXCEPTION(0000000093343A78)72 25 25 1568 000000001D8C3610 B020 B020启用000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162080CICCICTAFOO
loops - 如何像这样在Windbg中编写一个循环?
我有一个名为 Foo 的类型,它有一个名为 length 的字段。我想在 Windbg 中编写一个循环语句,它将转储托管堆中所有类型为 Foo 的对象实例的长度字段?
提前谢谢,乔治
asp.net - 对象没有被垃圾回收,但不包含 gcroots
在这里我们的网络应用程序遇到了一个棘手的问题。(Asp.net 2.0 赢服务器 2008)
尽管我希望它保持在相当静态的水平,但我们对网站的内存使用量会不断增长。(我们有少量数据存储在状态中)。
想找出问题所在,我运行了 System.GC.Collect(); 几次,进行内存转储,然后将此内存转储加载到 WinDbg 中。
当我执行 DumpHeap -Stat 时,我会在特定类型的内存中得到一个非常大的数字。
0000064280580b40 713471 79908752 付款选项
所以,为这种类型做一个 DumpHeap -MT,我得到了一堆对象引用。选择其中的一个随机数,我执行 !gcroot 并且命令返回报告没有对其进行引用。
对我来说,这正是 GC 应该收集这些项目的时候,但由于某种原因,它们一直处于未完成状态。
任何人都可以解释可能发生的事情吗?
debugging - 调试符号问题
当我们使用 Windbg 或 Visual Studio 分析转储文件时,我对使用哪个符号文件感兴趣。假设我的应用程序正在使用一个实用程序库,并且该实用程序库有相关的私有符号文件。当我的应用程序中出现故障转储时,我需要实用程序库的符号来分析完整的调用堆栈。但有时构建/运行时/调试环境安装有不同版本的实用程序库——(肯定)是不同版本的实用程序库符号。
假设我们有一个版本(例如版本 A)的实用程序库(和相关符号)用于构建(链接)我的应用程序,当发生崩溃时,在运行时使用另一个版本(例如版本 B)的实用程序库(和相关符号),并且当我分析故障转储时,在 Windbg 中使用另一个不同版本(例如版本 C)的实用程序库(和相关符号)。
我的问题是,在运行时生成崩溃时,使用版本 B 符号生成崩溃转储(用符号信息填充转储)?但是在Windbg调试环境中使用不同版本的符号C时,会出现符号不匹配的问题?并且使用哪个版本的库来构建无关紧要?我的理解都正确吗?
提前谢谢,乔治
debugging - 我如何知道故障转储的 CLR 版本?
我有一个小型转储从 .NET 应用程序中崩溃。有没有办法使用 Windbg 或其他工具知道故障机器(生成故障转储)的 CLR 版本(例如 mscorwks.dll 的版本)?
c# - 大对象堆碎片
我正在处理的 C#/.NET 应用程序正在遭受缓慢的内存泄漏。我已经使用 CDB 和 SOS 来尝试确定正在发生的事情,但数据似乎没有任何意义,所以我希望你们中的一个人以前可能经历过这种情况。
该应用程序在 64 位框架上运行。它不断地计算数据并将数据序列化到远程主机,并且相当大的对象堆(LOH)。但是,我希望大多数 LOH 对象是瞬态的:一旦计算完成并发送到远程主机,就应该释放内存。然而,我看到的是大量(活动)对象数组与空闲内存块交错,例如,从 LOH 中获取一个随机段:
显然,如果我的应用程序在每次计算期间都创建了长期存在的大型对象,我希望会出现这种情况。(它确实这样做了,我接受会有一定程度的 LOH 碎片,但这不是这里的问题。)问题是你可以在上面的转储中看到的非常小的(1056 字节)对象数组,我在代码中看不到正在被创建并且以某种方式保持扎根。
另请注意,当堆段被转储时,CDB 没有报告类型:我不确定这是否相关。如果我转储标记的 (<--) 对象,CDB/SOS 会正常报告:
对象数组的元素都是字符串,并且可以从我们的应用程序代码中识别出这些字符串。
此外,我无法找到它们的 GC 根,因为 !GCRoot 命令挂起并且再也没有回来(我什至尝试过让它过夜)。
所以,如果有人能解释为什么这些小(<85k)对象数组最终会出现在 LOH 上,我将非常感激:.NET 在什么情况下会在其中放置一个小对象数组?另外,有没有人碰巧知道确定这些对象的根源的另一种方法?
更新 1
我昨天晚些时候提出的另一个理论是,这些对象数组开始时很大,但已经缩小,留下了内存转储中明显的空闲内存块。让我怀疑的是,对象数组似乎总是 1056 字节长(128 个元素),128 * 8 的引用和 32 字节的开销。
这个想法是,库或 CLR 中的某些不安全代码可能会破坏数组标头中的元素数量字段。我知道有点远射...
更新 2
感谢 Brian Rasmussen(请参阅已接受的答案),该问题已被确定为由字符串实习生表引起的 LOH 碎片!我写了一个快速测试应用程序来确认这一点:
应用程序首先在循环中创建和取消引用唯一字符串。这只是为了证明在这种情况下内存没有泄漏。显然它不应该也不应该。
在第二个循环中,创建并保留唯一字符串。此操作将它们植根于实习生表。我没有意识到实习生表是如何表示的。它似乎由一组页面组成——128 个字符串元素的对象数组——在 LOH 中创建。这在 CDB/SOS 中更为明显:
对 LOH 段进行转储揭示了我在泄漏应用程序中看到的模式:
请注意,对象数组大小为 528(而不是 1056),因为我的工作站是 32 位的,而应用程序服务器是 64 位的。对象数组仍然是 128 个元素长。
所以这个故事的寓意是要非常小心地实习。如果不知道您正在实习的字符串是有限集的成员,那么您的应用程序将由于 LOH 的碎片而泄漏,至少在 CLR 的版本 2 中。
在我们的应用程序的案例中,反序列化代码路径中有通用代码在解组期间实习实体标识符:我现在强烈怀疑这是罪魁祸首。然而,开发人员的意图显然是好的,因为他们想确保如果同一个实体被多次反序列化,那么只有一个标识符字符串的实例将保留在内存中。