随笔分类 -  调试

上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 32 下一页

关于bug调试工具的使用/方法/经验
使用WinDbg调查.NET异常(编译和加载异常)
摘要:所有.NET异常都源于System.Exception以及以下成员变量。 Data HelpLink InnerException Message Source StackTrace TargetSite 除了这些基本信息之外,System.Exception通常会添加一些成员变量,它们在其中存储特 阅读全文

posted @ 2020-09-01 07:45 活着的虫子 阅读(755) 评论(0) 推荐(1) 编辑

.NET内存使用-一个餐厅类比
摘要:类比第1部分-一般内存使用 32位系统上的进程通常可以寻址2GB的虚拟地址空间。这是你必须使用的内存,与你有多少内存无关。更多的RAM有助于提高性能,因为使用更多RAM可以减少页面数量,但对于扩展2GB地址空间没有任何作用。想象一下这个2GB地址空间是一家餐厅的占地面积。当你分配一个对象(无论它是. 阅读全文

posted @ 2020-08-31 07:55 活着的虫子 阅读(263) 评论(0) 推荐(0) 编辑

.Net异常-跟踪异常在代码中发生的位置
摘要:大多数情况下,方法都很短,只需知道你在哪个函数中出现了异常,就足以让你找出原因,但我们都知道,我们并不是生活在这样一个完美的世界里:我们编写的是完全模块化的应用程序,所有的东西都排列得很整齐:)假设你在堆上发现了这个异常。。。 0:025> !dumpobj 02b7191c Name: Syste 阅读全文

posted @ 2020-08-28 07:53 活着的虫子 阅读(480) 评论(1) 推荐(0) 编辑

到底是什么原因导致我的进程崩溃?
摘要:当你你有1000个w3wp.exe文件在eventviewer中意外停止,或者您的进程以某种奇怪的未定义方式退出,您不知道原因。当一个进程崩溃或退出时,将触发一个称为EPR(Exit process)的特殊事件,因此使用类似于windbg.exe文件我们可以附加到进程中,等待epr被抛出,然后进行内 阅读全文

posted @ 2020-08-27 13:58 活着的虫子 阅读(1623) 评论(0) 推荐(0) 编辑

!dumpheap –stat的解释(debugging .net leaks)
摘要:到目前为止,!dumpheap 是调试托管内存泄漏时最强大的命令。它将向您显示托管堆上的所有对象,并使用的不同开关你可以用你想要的任何方式显示输出。!dumpheap是sos.dll框架安装附带的扩展(在framework目录中),如果安装了SDK,则可以在C:\Program files\ Mic 阅读全文

posted @ 2020-08-26 08:32 活着的虫子 阅读(1499) 评论(0) 推荐(0) 编辑

内存泄漏了!!!我该怎么办
摘要:这并不是说它很重要,而是因为它是我的一个大麻烦,我想区分真正的内存泄漏和高内存使用率。内存泄漏是指您使用了一些内存并且丢失了指向分配的指针,因此您无法再取消分配该内存。如果你仍然有一个指向它的指针,你的内存使用率很高,这可能与进程发生的情况一样糟糕,但仍然不同。为了简单起见,我将从现在开始对这两个问 阅读全文

posted @ 2020-08-25 08:12 活着的虫子 阅读(590) 评论(0) 推荐(0) 编辑

SOS扩展系列---利用SOS计算变量生存期
摘要:下面这个程序有一个bug,试试看你能不能抓住它。 Test.cs (编译成 DelegateExample.exe): using System; using System.Threading; using System.Runtime.InteropServices; class Test { d 阅读全文

posted @ 2020-08-24 08:00 活着的虫子 阅读(312) 评论(0) 推荐(0) 编辑

遍历GC堆
摘要:了解对象在gc堆中的布局是很有用的。在垃圾收集期间,有效的对象是通过递归访问对象来标记的,这些对象从堆栈的根和句柄开始。但是,从每个堆段的开始到结束,对象的位置以一种有组织的方式排列也很重要。!DumpHeap命令依赖于这个逻辑组织来正确地遍历堆,如果它报告了一个错误,可以打赌您的堆出了问题。 下面 阅读全文

posted @ 2020-08-21 08:18 活着的虫子 阅读(263) 评论(0) 推荐(0) 编辑

OutOfMemoryException和对象锁定
摘要:众所周知,在CLR中,内存管理是由垃圾收集器(GC)完成的。当GC在新对象的预分配内存块(GC堆)中找不到内存,并且无法从操作系统预订足够的内存来扩展GC堆时,它抛出OutOfMemoryException(OOM)。 问题 我不时听到关于OOM的抱怨——人们分析代码并监控内存使用情况,发现有时当有 阅读全文

posted @ 2020-08-20 08:33 活着的虫子 阅读(253) 评论(0) 推荐(0) 编辑

这个内存不足的家伙是谁?当我有足够的内存,为什么他让我的进程崩溃?
摘要:为了回答这个问题,我们需要讨论几个概念。在32位系统上工作时,可以寻址4GB内存,其中2GB通常保留给操作系统,每个用户模式进程(如w3)允许有2GB内存wp.exe文件(asp.net)例如。这个内存称为虚拟内存,2GB是2GB,与系统中添加的RAM数量无关。RAM的数量只是决定了你需要做多少分页 阅读全文

posted @ 2020-08-19 08:14 活着的虫子 阅读(213) 评论(0) 推荐(0) 编辑

Windbg Script---跟踪MessageBox调用
摘要:在过去,我研究了一个支持案例,我需要找出C++应用程序中的一些消息框是否被显示,如果是肯定的,消息是什么。每次我问用户时得到的回答都不一致,所以我不知道是否出现了MessageBox或消息是什么。这听起来像是另一个完美的场景,脚本可能会有所帮助!事实上,这对我帮助很大,我希望对你也有帮助。这个脚本映 阅读全文

posted @ 2020-08-18 08:31 活着的虫子 阅读(480) 评论(0) 推荐(0) 编辑

Windbg Script---从.NET应用程序检索查询/存储过程
摘要:好的,假如正在调试一个.NET应用程序。您需要找出从访问数据库的线程执行的查询和存储过程,但是您不知道如何。好消息!这已经不是问题了!此脚本显示与SQLCommand或OracleCommand对象关联的所有查询或存储过程。此外,您可以单击它以获取更多详细信息和使用它的线程。。以下是截图: Sour 阅读全文

posted @ 2020-08-17 07:58 活着的虫子 阅读(157) 评论(0) 推荐(0) 编辑

Windbg Script---挖掘调用堆栈
摘要:Windbg有很多命令和命令变体,因此有时您可能会忘记其中的一些命令,比如当您需要挖掘调用堆栈以提取更多信息时。或者您可能记得获取调用堆栈详细信息的命令,但您需要确保获得整个堆栈。或者,您可能需要一种快速挖掘堆栈的方法,首先从帧中获取信息,然后从局部变量获取信息,而无需花费太多时间键入命令或使用箭头 阅读全文

posted @ 2020-08-14 08:32 活着的虫子 阅读(328) 评论(0) 推荐(0) 编辑

Windbg Script---一个从连接池里查找信息的脚本
摘要:如果您像我一样,您可能会忘记需要查找某些特定信息的类和名称空间。或者你忘了要查找的字段名。例如当我需要从System.Data.SqlClient命名空间查找信息。此脚本从连接检索特定信息。扩展它也很容易,因此可以使用相同的方法从其他名称空间和字段中提取信息。就个人而言,我更喜欢基于DML(调试标记 阅读全文

posted @ 2020-08-13 07:49 活着的虫子 阅读(237) 评论(0) 推荐(0) 编辑

VS里调试排除干扰(启用所有异常进行调试)
摘要:使用Microsoft Visual Studio 进行调试时,在打开托管调试的情况下从.NET项目进行调试时,您可能会受到各种不真正关心的异常的困扰。以下是如何设置你的环境来忽略那些愚蠢的东西,并保留好的东西。 具体内容: 勾选(在方框中打勾)两列中的所有类别。 选中然后取消选中托管调试助手以强制 阅读全文

posted @ 2020-08-12 08:23 活着的虫子 阅读(820) 评论(0) 推荐(1) 编辑

WER设置
摘要:Windows错误报告(WER)提供了许多设置来自定义问题报告体验。所有这些设置都可以使用组策略进行设置。有些还可以在Windows 7、Windows 8的操作中心或Windows Vista的问题报告和解决方案中进行更改。WER设置位于以下注册表子项之一: HKEY_CURRENT_USER\S 阅读全文

posted @ 2020-08-10 08:25 活着的虫子 阅读(953) 评论(0) 推荐(0) 编辑

如何在dump文件里找到真正的类this指针
摘要:我们都知道,C++的类成员函数调用离不this指针,this指针其实是作为隐形参数传递到成员函数的,VC++编译器是借助ecx寄存器来传递的。也正式这一点,很多调试器借助它来获取this指针。 在我们正向单步调试时,Windbg可以正确获取到this指针 0:000> dx Debugger.Ses 阅读全文

posted @ 2020-08-07 08:15 活着的虫子 阅读(487) 评论(0) 推荐(0) 编辑

Visual Studio /analyze不好之处---漏报(四)
摘要:分析是一种强大的VisualC++特性,可以帮助发现bug。然而,它有时忽略了关键问题。在这篇简短的文章中,我描述了一个有趣的危险模式,它无法识别,并解释了一个真正的解决方法。 这些测试都是用Visual Studio 2010 SP1,C/C++优化编译器版本16.00 .40219.01为80× 阅读全文

posted @ 2020-08-06 08:22 活着的虫子 阅读(206) 评论(0) 推荐(0) 编辑

Visual Studio /analyze不好之处---漏报(三)
摘要:分析是一种强大的VisualC++特性,可以帮助发现bug。然而,它有时会在不存在问题的情况下发现问题。不幸的是,这些误报,就像这里报道的那样,使/分析变得不那么有用,因为严重的错误最终会被“狼”的叫声淹没。在这篇文章中,我描述了另一个令人沮丧的误报,它展示了一个编译器完全无法理解别名的例子。 Vi 阅读全文

posted @ 2020-08-05 11:53 活着的虫子 阅读(193) 评论(0) 推荐(0) 编辑

Visual Studio /analyze不好之处---漏报(二)
摘要:像/analyze这样的静态分析工具必须在报告警告时过于激进(导致过多的误报)和过于胆小(导致过多的误报)之间保持微妙的平衡。我不能分析这些错误,因为我不能分析这些错误。这两个警告在使用gcc生成时都会显示,但在使用visualstudio的/analyze时则不会显示。 返回局部变量地址 第一个很 阅读全文

posted @ 2020-08-04 08:21 活着的虫子 阅读(186) 评论(0) 推荐(0) 编辑

上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 32 下一页

导航