软件调试系列
文章平均质量分 77
崔伟灿
这个作者很懒,什么都没留下…
展开
-
软件调试系列之初识调试之剑-Windbg
当测试人员向开发人员反馈问题时,是否经常听到这么一句:“我的电脑上没有问题”,这在新手口中,更容易听到。但是为什么他们会这么说呢,究其原因,可能是因为测试人员的电脑上出现的Bug让他束手无措,无计可施,所以只能搬出“我的电脑没问题”这一说辞来推诿,以证明自己的软件没有问题。 为了避免这种情况,我们需要从两方面着手, 1:在测试人员发现问题时能更有效地保存软件出错时原创 2012-03-13 09:59:43 · 3428 阅读 · 2 评论 -
软件调试系列:.Net应用程序调试之设置断点
.Net应用程序调试之设置断点在软件调试过程中,断点功能至关重要,想像一下,如果没有断点功能,那么当我们需要查看特定函数的执行情况时,该是多么的困难。.Net应用程序虽然是在执行过程中将中间代码编译成本地代码,也就是说如果中间代码未被编译成本地代码之前,我们无法用bp 命令来设置断点,而我们又很难知道中间代码何时被编译成本地代码,看似是一个很困难的任务,但所幸Windbg.exe原创 2013-05-08 18:25:28 · 427 阅读 · 0 评论 -
软件调试系列: .Net应用程序软件崩溃调试
.Net应用程序软件崩溃调试排查软件崩溃问题,最重要的一点就是找到软件出错点,相比较C++应用程序来说,.Net应用程序会稍有不同。通常,排查软件崩溃问题的思路是1:确认出错的函数2:确认出错的操作指令现在举例说明.Net 应用程序如何来调试 崩溃问题步聚1:使用~*kbn显示所有线程调用线,找到异常线程 . 0 Id:原创 2013-04-16 18:25:11 · 710 阅读 · 0 评论 -
软件调试系列:.Net应用程序编译及执行过程
.Net应用程序编译及执行过程与传统的Windows应用程序相比,.Net应用程序有很多不同的地方,尤其是在编译与执行期间。首先来看一下编译过程,传统的Windows应用程序会被编译器直接编译成与特定机器相关的本地应用程序,这类程序则只能在特定操作系统及硬件系统上运行,而.Net应用程序在编译时只会被编译成MSIL(中间代码),在运行期间被即时编译成本地指令,从而可达到跨平台的效果原创 2013-04-15 09:45:47 · 454 阅读 · 0 评论 -
软件调试系列:高CPU排查方法浅谈
软件性能较差,占用CPU较多,往往是由于某段代码逻辑算法不佳导致,那如何在数以千计的函数中找到问题函数呢?这类问题的排查有很多方法,这里介绍如何用神器Windbg是排查。其中,排查步骤如下步聚1:在使用!runaway命令比较不同时间各线程占用CPU时间,找到CPU时间增涨较多的线程,那么就初步定位了问题函数所在的问题线程,步聚2:然后在不同的时刻观察问题线程的调用栈,如果多次观察原创 2013-02-27 16:47:32 · 800 阅读 · 0 评论 -
软件调试系列:谁动了我的线程
死锁的原因很多,其中一种比较常见的是 线程占用临界区后被强杀,导致临界区没有释放,因此当其它线程访问该临界区就会死等。可是到底是谁强杀了线程了呢?被强杀的线程当时的调用线又是什么呢?对于问题1:有两种办法找到答案。一)搜索所有的代码,查看是否有调用terminatethread的地方。二)在内存中搜索调用terminatethread的指令。方法一有一定难度,因为开发人员可原创 2013-02-26 13:23:39 · 403 阅读 · 0 评论 -
软件调试系列:死锁篇之寻找消失的线程
一:遭遇挑战小鸟:"咦?这软件怎么没有响应了"小菜:"哦,从dump文件看,可能是某个线程占用了一个锁,但在该锁被释放前,该线程却被强杀了吧...."小鸟:"这可能吗?是什么线程消失了?当时它在做什么呢?"小菜:"这个..只是猜测,线程都消失了,怎么知道是什么线程,并且知道当时在做什么呢?"二:动动脑小鸟:"线程被强制结束,会导致资源泄漏的. 不知道泄漏原创 2012-04-16 14:28:52 · 1335 阅读 · 1 评论 -
软件调试系列:崩溃篇之内存值异常
本来想尽快写一系列文章来介绍各种常见缺陷的软件调试文章,但由于工作原因并且大家的反映似乎不太好,所以我也有点偷懒了。不管怎么样,正好现在有空,咱来聊一聊最近我查的一个崩溃BUG吧。前几天接手排查一个崩溃BUG,测试部报告说该BUG在两台电脑上出现过,并且错误提示信息一模一样,这个BUG直接原因很容易定位,通过windbg分析该BUG的dump文件发现,程序在释放内存时出错,其调用栈如下图1所示原创 2012-03-29 15:39:09 · 1906 阅读 · 10 评论 -
软件调试系列:内存泄露篇之基本调试步聚
相比崩溃,内存泄漏是一种比较容易排查的BUG,只需按照即定的操作步聚,重现一次内存泄露,即可找出内存泄露所在的代码行。现在介绍一下如何利用windbg提供的工具来排查内存泄漏问题.首先需要设置PDB文件的路径,设置环境变量:变量名为_NT_SYMBOL_PATH,变量值为PDB文件所在的路径我的设置是:C:\WINDOWS\Symbols;C:\WINDOWS\system32;E原创 2012-04-09 15:06:45 · 763 阅读 · 0 评论 -
软件调试系列:软件崩溃篇之内存异常崩溃
导致崩溃的情况很多,同样崩溃的表现也是千差万别,既然如此,那么还是让我们先来看一下这个崩溃是如何用Windbg分析的吧。某年某月某日,测试人员报告说,Sample.exe软件崩溃了,两名开发人员小崔与小阮闻讯, 也随即崩溃了.从Sample.exe崩溃时截下的dump文件看,当时出错的线程调用栈是:0:000> kLChildEBP RetAddr 00100350 77d1原创 2012-03-19 11:43:50 · 1533 阅读 · 1 评论 -
软件调试系
导致崩溃的情况很多,同样崩溃的表现也是千差万别,既然如此,那么还是让我们先来看一下这个崩溃是如何用Windbg分析的吧。某年某月某日,测试人员报告说,Sample.exe软件崩溃了,两名开发人员小崔与小阮闻讯, 也随即崩溃了.从Sample.exe崩溃时截下的dump文件看,当时出错的线程调用栈是:0:000> kLChildEBP RetAddr 00100350 77d193原创 2012-03-19 11:42:23 · 160 阅读 · 0 评论 -
软件调试系列之Windbg探究(下)
三配置调试器相关信息参数 这里有两点信息需要设置 a:符号文件(PDB文件)路径。 b:源代码路径。 1:设置符号文件路径: 在调试时,我们通常需要知道当前软件的运行状态,如当前出错线程的调用栈是什么,出错的函数名,及该函数的参数和局部变量值是什么。仅仅看到如下的截图1就来分析,调试Bug是很不靠谱,也是很不负责任的行为。截图1原创 2012-03-15 13:13:03 · 2911 阅读 · 2 评论 -
软件调试系列:软件崩溃篇之崩溃BUG基本调试步骤
在各种软件Bug类型中,崩溃当属用户体验最差的Bug之一,同时,这些类型的Bug也是最难查,最令人困扰的Bug之一,其它类型如死锁,内存泄露,相比之下,就显得小儿科多了。常见的软件崩溃主要是断言与未处理异常,断言引起的软件崩溃相对来说比较容易定位,而未处理异常的定位比较困难,现在看看如何利用Windbg进行未处理异常错误的排查,其步聚如下:1.利用windbg打开软件出错时抓取的Dump文原创 2012-03-16 11:41:24 · 1941 阅读 · 3 评论 -
软件调试系列之Windbg探究(上)
套用80/20原则,我们大部分时候只使用了Windbg的20%功能,当然我没有精确统计过,但也相差无几,Windbg的上百条功能命令中,我们平时工作也就是使用了其中的几组命令而己,为了减少大家学习的负担,我准备在实战中讲解Windbg的常用功能。那么,让我们开始Windbg实战之旅吧 现在,测试部江湖告急,报告说他无意中发现软件Sample.exe崩溃了。 “很奇怪原创 2012-03-14 14:29:05 · 1691 阅读 · 2 评论 -
软件调试系列序言
前段时间,我收到了大学母校的一封邮件,信中说学校为了更好地建立学校与校友的联系,打算成立一个校友导师团,所以要对毕业生做一个问卷调查。这份调查中有一题是评价母校的课程设置是否合理。大学的课程设置是否合理?我真不知道怎么回答,说合理吧,好像很多课程与工作也没什么关系,工作中感觉都用不上。说不合理吧,也不是这么回事情,平心而论,大学时学的知识或学习方式在很大程度上帮助我更快地掌握新的知识。但是原创 2012-03-12 09:43:38 · 1076 阅读 · 4 评论 -
.Net的垃圾自动回收机制之一
.Net的垃圾自动回收机制之一内存管理是软件开发过程中相当重要的一环。据调查,软件故障中大多数异常均是于内存管理相关,比如野指针,比如重复释放,再比如内存泄露等。为提高软件开发效率,很多开发平台如.Net, Java 等提供了垃圾自动回收机制(GC),替开发人员管理内存。那么这垃圾回收机(GC)是如何分配内存的?又是如何释放垃圾内存的?GC有内存碎片的问题吗?在开始回答这些问题之前原创 2013-06-14 13:50:47 · 510 阅读 · 0 评论