标签: windbg

无法在WinDbg中加载SOS

背景:我是WinDbg的新手并试图让它第一次运行.我想检查一下从Windows Server 2008(x86)上的IIS 7中运行的运行的ASP.NET 4站点获取的内存转储,并下载到我的本地计算机.

我安装了调试工具并首次启动了WinDbg,打开了故障转储.我去了File | 符号文件路径并设置路径*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*并等待加载的所有符号.

在尝试加载SOS时,我遇到了问题.首先,我尝试了以下命令......

.loadby sos mscorwks
Run Code Online (Sandbox Code Playgroud)

......并收到了答复Unable to find module 'mscorwks'.

在搜索网页后,我尝试通过执行以下命令来加载mscorwks ...

sxe ld mscorwks.dll
g
Run Code Online (Sandbox Code Playgroud)

...并收到响应"'g'中没有可运行的调试对象错误"

我将SOS.dll(从C:\ Windows\Microsoft.NET\Framework\v4.0.30319)复制到WinDbg目录中,然后尝试...

.load sos
Run Code Online (Sandbox Code Playgroud)

......并收到错误......

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
Run Code Online (Sandbox Code Playgroud)

我不太清楚如何继续.我只是想加载SOS并挖掘这个转储文件.任何帮助将不胜感激.

Fyi ...我正在尝试使用64位版本的Windbg在64位版本的Windows 7上打开转储文件.

windbg .net-4.0 sos

131
推荐指数
2
解决办法
7万
查看次数

大对象堆碎片

我正在研究的C#/ .NET应用程序正在遭受缓慢的内存泄漏.我已经使用CDB和SOS来尝试确定发生了什么,但数据似乎没有任何意义,所以我希望你们中的一个人之前可能已经经历过这种情况.

该应用程序在64位框架上运行.它不断地计算并将数据序列化到远程主机,并且正在大量地击中大对象堆(LOH).但是,我希望大多数LOH对象都是瞬态的:一旦计算完成并且已经发送到远程主机,就应该释放内存.然而,我所看到的是大量(实时)对象数组与空闲的内存块交织,例如,从LOH中获取一个随机段:

0:000> !DumpHeap 000000005b5b1000  000000006351da10
         Address               MT     Size
...
000000005d4f92e0 0000064280c7c970 16147872
000000005e45f880 00000000001661d0  1901752 Free
000000005e62fd38 00000642788d8ba8     1056       <--
000000005e630158 00000000001661d0  5988848 Free
000000005ebe6348 00000642788d8ba8     1056
000000005ebe6768 00000000001661d0  6481336 Free
000000005f214d20 00000642788d8ba8     1056
000000005f215140 00000000001661d0  7346016 Free
000000005f9168a0 00000642788d8ba8     1056
000000005f916cc0 00000000001661d0  7611648 Free
00000000600591c0 00000642788d8ba8     1056
00000000600595e0 00000000001661d0   264808 Free
...
Run Code Online (Sandbox Code Playgroud)

显然,如果我的应用程序在每次计算期间创建长寿命的大对象,我会期望这种情况.(它确实这样做,我接受会有一定程度的LOH碎片,但这不是问题.)问题是你可以在上面的转储中看到的非常小的(1056字节)对象数组,我在代码中看不到正在创建,并以某种方式保持根深蒂固.

另请注意,转储堆段时CDB不报告类型:我不确定这是否相关.如果我转储标记的(< - )对象,CDB/SOS报告正常:

0:015> !DumpObj 000000005e62fd38
Name: System.Object[]
MethodTable: 00000642788d8ba8
EEClass: 00000642789d7660
Size: 1056(0x420) bytes
Array: Rank 1, Number of elements 128, Type CLASS …
Run Code Online (Sandbox Code Playgroud)

.net c# memory-leaks memory-management windbg

96
推荐指数
2
解决办法
3万
查看次数

如何在内存中找到代表扫雷的矿山布局的数据结构?

我正在尝试学习逆向工程,使用Minesweeper作为示例应用程序.我在一个简单的WinDbg命令上发现了这篇MSDN文章,它揭示了所有的地雷,但它已经很老了,没有详细解释,也不是我想要的.

我有IDA Pro反汇编程序WinDbg调试程序,我已经将winmine.exe加载到它们中.在找到代表矿区的数据结构的位置方面,有人能为这些程序中的任何一个提供一些实用技巧吗?

在WinDbg中我可以设置断点,但是我很难想象在什么时候设置断点和什么内存位置.同样,当我在IDA Pro中查看静态代码时,我不知道在哪里开始找到代表矿区的函数或数据结构.

Stackoverflow上是否有任何反向工程师可以指向正确的方向?

windbg reverse-engineering memory-editing ida minesweeper

93
推荐指数
5
解决办法
2万
查看次数

在没有整个WDK的情况下获得windbg?

有没有人知道如何获得windbg,而无需下载整个620MB WDK ISO?

我可以在网上找到的下载调试器的是这个链接,它说你必须得到整个WDK:http://www.microsoft.com/whdc/devtools/debugging/default.mspx.

windbg

87
推荐指数
10
解决办法
12万
查看次数

这是"不应该发生"崩溃AMD Fusion CPU的错误吗?

我的公司已经开始让许多客户打电话,因为我们的程序因其系统上的访问冲突而崩溃.

崩溃发生在SQLite 3.6.23.1中,我们将其作为应用程序的一部分提供.(我们提供自定义构建,以便使用与应用程序其余部分相同的VC++库,但这是SQLite代码库存.)

pcache1Fetch执行时发生崩溃call 00000000,如WinDbg调用堆栈所示:

0b50e5c4 719f9fad 06fe35f0 00000000 000079ad 0x0
0b50e5d8 719f9216 058d1628 000079ad 00000001 SQLite_Interop!pcache1Fetch+0x2d [sqlite3.c @ 31530]
0b50e5f4 719fd581 000079ad 00000001 0b50e63c SQLite_Interop!sqlite3PcacheFetch+0x76 [sqlite3.c @ 30651]
0b50e61c 719fff0c 000079ad 0b50e63c 00000000 SQLite_Interop!sqlite3PagerAcquire+0x51 [sqlite3.c @ 36026]
0b50e644 71a029ba 0b50e65c 00000001 00000e00 SQLite_Interop!getAndInitPage+0x1c [sqlite3.c @ 40158]
0b50e65c 71a030f8 000079ad 0aecd680 071ce030 SQLite_Interop!moveToChild+0x2a [sqlite3.c @ 42555]
0b50e690 71a0c637 0aecd6f0 00000000 0001edbe SQLite_Interop!sqlite3BtreeMovetoUnpacked+0x378 [sqlite3.c @ 43016]
0b50e6b8 71a109ed 06fd53e0 00000000 071ce030 SQLite_Interop!sqlite3VdbeCursorMoveto+0x27 [sqlite3.c @ 50624]
0b50e824 71a0db76 071ce030 …
Run Code Online (Sandbox Code Playgroud)

crash x86 assembly windbg amd-processor

68
推荐指数
1
解决办法
3261
查看次数

xperf WinDBG C#.NET 4.5.2应用程序 - 了解进程转储

在负载很重的情况下,我们的应用程序正在使一个强大的服务器达到100%的CPU使用率.读取进程转储,查看线程,其中一些是10分钟.在使用时,他们都没有给我任何见解!CLRStack.

!失控给了我:

0:030> !runaway
 User Mode Time
  Thread       Time
  53:2e804      0 days 0:10:04.703
  30:31894      0 days 0:07:51.593
  33:47100      0 days 0:07:24.890
  42:11e54      0 days 0:06:45.875
  35:35e18      0 days 0:06:07.578
  41:54464      0 days 0:05:49.796
  47:57700      0 days 0:05:45.000
  44:3c2d4      0 days 0:05:44.265
  32:3898c      0 days 0:05:43.593
  50:54894      0 days 0:05:41.968
  51:5bc58      0 days 0:05:40.921
  43:14af4      0 days 0:05:40.734
  48:35074      0 days 0:05:40.406
  ...
Run Code Online (Sandbox Code Playgroud)

在其中一个线程上调用!DumpStack,我得到:

0000001ab442f900 00007ff9ef4c1148 KERNELBASE!WaitForSingleObjectEx+0x94, calling ntdll!NtWaitForSingleObject
0000001ab442f980 00007ff9e920beb2 clr!SVR::gc_heap::compute_new_dynamic_data+0x17b, calling clr!SVR::gc_heap::desired_new_allocation
0000001ab442f9a0 00007ff9e90591eb clr!CLREventWaitHelper2+0x38, calling kernel32!WaitForSingleObjectEx
0000001ab442f9b0 00007ff9e90e0d2c …
Run Code Online (Sandbox Code Playgroud)

.net c# jit windbg xperf

64
推荐指数
1
解决办法
1328
查看次数

如何在WinDbg中中止长时间操作?

通常,WinDbg将进入 *忙*执行操作的状态.

这种情况往往是由于一些错误,我做了尝试some_variable_itll_never_find dt的或地方设置一个破发点无符号或其他错误,我提出解决此工具摸索1000的.

有没有办法取消当前的操作?

windows debugging windbg

59
推荐指数
4
解决办法
2万
查看次数

为什么使用WinDbg与Visual Studio(VS)调试器?

使用WinDbg与Visual Studio调试器的主要原因是什么?

它是否通常用作Visual Studio调试器的完全替代品,或者在需要时用作更多.

windbg visual-studio

58
推荐指数
3
解决办法
2万
查看次数

开始学习Windbg

在被一个我根本没有调试知识的问题困扰之后,我决定我必须学习如何使用Windbg.我唯一的问题:我不知道从哪里开始:-(我不是一个真正的WinApi-Guy,通常使用通过抽象Windows Api抽象的语言.

所以我只是想知道:对于那些了解编程但不太了解Windows内在深度的人来说,学习Windbg的最佳源(书籍,网站)是什么?(是的,我每天都读旧的东西:))

debugging windbg

47
推荐指数
3
解决办法
9417
查看次数

windbg:命令输出到文本文件

如何将WinDbg中的命令输出保存到文本文件?

windbg

45
推荐指数
3
解决办法
3万
查看次数