DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  异常诊断与调试

上一页 1 ··· 6 7 8 9 10

摘要:Effective minidump简介在过去几年里,崩溃转储(crash dump)成为了调试工作的一个重要部分。如果软件在客户现场或者测试实验室发生故障,最有价值的解决方式是能够创建一个故障瞬间的应用程序状态镜像,然后可以在开发者的机器上通过调试器进行分析。第一代的crash dump通常被称为“全用户转储(full user dump)”,它包含了进程的虚拟内存的全部内容。毫无疑问,这样的dump对于事后调试非常有价值。但是,这样的dump经常非常大,使得通过电子方式发送给开发者非常困难,甚至没法完成。另外,没用公共接口可以通过程序调用来创建dump,我们必须依赖于第三方工具(例如,Dr 阅读全文
posted @ 2014-03-31 15:57 DoubleLi 阅读(18564) 评论(0) 推荐(1) 编辑

摘要:我们知道,GDB的backtrace命令可以查看堆栈信息。但很多时候,GDB根本用不上。比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试。如果能让程序自己输出调用栈,那是最好不过了。本文介绍和调用椎栈相关的几个函数。NAMEbacktrace, backtrace_symbols, backtrace_symbols_fd - support for application self-debuggingSYNOPSIS#include int backtrace(void **buffer, int size);char **backtrace_symbols(voi 阅读全文
posted @ 2014-03-31 15:56 DoubleLi 阅读(15494) 评论(0) 推荐(2) 编辑

摘要:IntroductionOne of the revolutionary features of C++ over traditional languages is its support for exception handling. It provides a very good alternative to traditional techniques of error handling which are often inadequate and error-prone. The clear separation between the normal code and the erro 阅读全文
posted @ 2014-03-31 14:17 DoubleLi 阅读(827) 评论(0) 推荐(0) 编辑

摘要:C++语言的运行时环境是基于栈的环境,堆栈跟踪(tracestack)就是程序运行时能够跟踪并打印所调用的函数、变量及返回地址等,C++异常中的堆栈跟踪就是当程序抛出异常时,能够把导致抛出异常的语句所在的文件名和行号打印出来,以及把调用抛出异常的语句的函数以及其它上层函数信息都打印出来。1. 为什么需要堆栈跟踪当你在开发程序时,你是否曾遇到过程序运行过程中突然当机,而你不知道哪一行代码出的问题;你是否曾遇到过程序调试过程中突然抛出异常,而你不知道哪一行代码出的问题;你是否曾遇到过当你在单步调试时突然抛出异常而你却忘了单步执行到哪一步时抛出的异常,于是你只好重来一次。Beta程序在客户那里试运行 阅读全文
posted @ 2014-03-31 14:13 DoubleLi 阅读(14778) 评论(0) 推荐(1) 编辑

摘要:难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下:VC调试篇设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configurati 阅读全文
posted @ 2014-03-28 17:53 DoubleLi 阅读(1259) 评论(0) 推荐(0) 编辑

摘要:http://www.cppblog.com/Walker/archive/2012/11/08/146153.htmlhttp://blog.sina.com.cn/s/blog_48f93b530100fsln.html在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了。因为release版本来就少了很多调试信息,更何况一般都是发布出去由用户使用,crash的现场很难保留和重现。本文将给出几个解决方案,完成对release版应用程序crash错误的调试。(本文只讨论Windows平台MSVC环境 阅读全文
posted @ 2014-03-28 17:13 DoubleLi 阅读(566) 评论(0) 推荐(0) 编辑

摘要:1案例描述作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭。请与您的供应商联系。呵呵,这句微软的“名言”,恐怕是程序员最怕见也最常见的东西了。在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正。本文描述了自己总结的几种定位崩溃的办法。2案例分析以下是几种常见的崩溃现象及对应的处理办法:1. 对于Release版本必现的崩溃且在Debug版本上也崩溃的程序 阅读全文
posted @ 2014-03-28 16:34 DoubleLi 阅读(5070) 评论(0) 推荐(0) 编辑

摘要:查找并指定符号文件和源文件;指定符号加载行为、使用符号和源服务器上;加载符号自动或在要求。内容查找符号 (.pdb) 文件查找源文件查找符号 (.pdb) 文件说明在之前的 Visual Studio 版本与 2012 中,调试在远程计算机上的管理的代码需要符号文件还查找了远程计算机。现在,这已经不成问题了。所有符号文件必须本地计算机或位于 Visual Studio选项对话框的调试/符号页上指定的位置。如果调试器搜索 .pdb 文件|符号文件的原因需要完全匹配可执行文件?|指定符号位置和加载行为|使用符号服务器以查找符号文件不在本地计算机|查找并加载符号,在调试时|设置符号文件的编译器选项程 阅读全文
posted @ 2013-12-22 16:20 DoubleLi 阅读(20225) 评论(0) 推荐(0) 编辑

摘要:前言:WinDbg是微软开发的免费源代码级的调试工具。WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。本文的讨论是在安装了Debugging Tools for Windows的前提下进行的,下载地址可以参考我之前的文章。WinDbg对于dump文件的调试可以通过菜单设置Symbol File Path、Source File Path,并可设置多个路径。1、打开Dump格式文件打开WinDbg,通过菜单[File]à[Open Crash dump]选择dump文件打开,也可通过CMD打开Dos命令窗口,切换到WinDbg所在目录,利用命令:WinD 阅读全文
posted @ 2013-12-22 16:17 DoubleLi 阅读(3652) 评论(0) 推荐(0) 编辑

摘要:很多软件通过设置自己的异常捕获函数,捕获未处理的异常,生成报告或者日志(例如生成mini-dump文件),达到Release版本下追踪Bug的目的。但是,到了VS2005(即VC8),Microsoft对CRT(C运行时库)的一些与安全相关的代码做了些改动,典型的,例如增加了对缓冲溢出的检查。新CRT版本在出现错误时强制把异常抛给默认的调试器(如果没有配置的话,默认是Dr.Watson),而不再通知应用程序设置的异常捕获函数,这种行为主要在以下三种情况出现。(1)调用abort函数,并且设置了_CALL_REPORTFAULT选项(这个选项在Release版本是默认设置的)。(2)启用了运行时 阅读全文
posted @ 2013-12-22 16:16 DoubleLi 阅读(1105) 评论(0) 推荐(0) 编辑

摘要:前言:通过drwtsn32、NTSD、CDB等调试工具生成Dump文件,drwtsn32存在的缺点虽然NTSD、CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD、CDB等调试工具。了解了mini dump文件格式后,完全可以程序自动生成Dump文件。本文主要讨论以下内容:1、运行原理2、程序修改3、注意事项一、运行原理当程序遇到未处理异常(主要指非指针造成)导致程序崩溃死,如果在异常发生之前调用了SetUnhandledExceptionFilter()函数,异常交给函数处理。MSDN中描述为:Issuing SetUnhandledExceptionFilter replaces 阅读全文
posted @ 2013-12-22 16:15 DoubleLi 阅读(929) 评论(0) 推荐(0) 编辑

摘要:前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件。使用VS2005打开生成的DMP文件,能很方便的找出BUG所在位置。本文将讨论以下内容:1、程序编译选项2、利用VS2005分析dump文件3、常见问题讨论一、程序编译选项PDB files contains all debug information like type definition and function prototype.When application crashes, we need the PDB files to analyze the root cause, so make 阅读全文
posted @ 2013-12-22 16:14 DoubleLi 阅读(1861) 评论(0) 推荐(0) 编辑

摘要:.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会在构建项目时创建PDB文件。在这里要区分两种情况:1、构建静态库时,可以在工程属性 –> C/C++ –> 输出文件–>程序数据库名 设置生成的pdb文件名称,如果不指定,默认是生成为VCx0.pdb,这里x是VS版本号,例如用VS2005,就会生成VC80.pdb。这里就会产生一个疑问,编译静态库时默认生成的.pdb文件名字都一样,那引用这个静态库的项目最后能找到正确的.pdb文件吗?答案是肯定的,因为VS会 阅读全文
posted @ 2013-12-22 16:05 DoubleLi 阅读(18155) 评论(1) 推荐(0) 编辑

摘要:当应用程序被链接以后,代码被逐一地翻译为一个个的地址,优化以后的代码可能初看起来更是面目全非。每当我们使用vs或者windbg等微软的调试工具进行调试的时候,我们可以方便地使用变量名来查看内存、可以使用函数名称来下断点、甚至可以指定某个文件的某一行来下断点。这一切背后是什么在指导调试器工作呢?答案就是符号——pdb或者dbg文件(.NET自己有元数据,符号不需要元数据已有的信息)。 程序运行的时候,计算机只需要逐条执行指令即可。而与源代码对应的关系是完全不需要知道的。这就给调试带来了困难,所以无论什么编译都有自己的一套用于对应代码和可执行程序。各种编译器都有自己保存类似这种对应关系的办法,有. 阅读全文
posted @ 2013-12-22 16:03 DoubleLi 阅读(2052) 评论(0) 推荐(0) 编辑

摘要:在网上找了好多资料才把这个调试环境搭好,下面总结一下:先说明两个概念:1.目标机:远程需要调试的机子,也就是被调试程序exe所在的机子,该机子可以安装VS2008或者不安装vs20082.调试机:安装VS2008的机子,就是存放代码下断点调试的机子,该机子必须安装vs2008下面介绍具体设置步骤:目标机:1.如果目标机安装了VS2008则直接在【开始菜单】->【Microsoft Visual Studio2008】->【VisualStudio Tools】下面找到Visual Studio 2008 Remote Debugger运行即可;如果目标机没有安装VS2008则需要将 阅读全文
posted @ 2013-07-26 14:25 DoubleLi 阅读(631) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10