.lastevent

.lastevent 命令显示最近一次发生的异常或事件。

[cpp] view plaincopy
  1. 0:000> .lastevent
  2. Last event: 1534.f4c: Break instruction exception - code 80000003 (first chance)
  3. debugger time: Tue May 22 10:47:26.962 2012 (GMT+8)
  4. 0:000> ~
  5. .  0  Id: 1534.e8c Suspend: 1 Teb: 7ffdf000 Unfrozen
  6. 1  Id: 1534.1338 Suspend: 1 Teb: 7ffde000 Unfrozen
  7. #  2  Id: 1534.f4c Suspend: 1 Teb: 7ffdd000 Unfrozen

我们可以看出,当前为2号线程发生异常,线程0前面的点号(.)表示它是当前线程。线程2前面的数字号(#)表示它是产生异常或调试器附加到进程时活动的线程。如果使用CTRL+C、 CTRL+BREAK或Debug | Break中断到调试器,总是会产生一个 0x80000003异常代码。

[cpp] view plaincopy
  1. 0:000> .lastevent
  2. Last event: 1664.4184: Access violation - code c0000005 (first/second chance not available)
  3. debugger time: Thu Aug 13 11:20:44.037 2015 (GMT+8)

异常错误码查询

异常
描述
EXCEPTION_ACCESS_VIOLATION
0xC0000005
程序企图读写一个不可访问的地址时引发的异常。例如企图读取0地址处的内存。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
0xC000008C
数组访问越界时引发的异常。
EXCEPTION_BREAKPOINT
0x80000003
触发断点时引发的异常。
EXCEPTION_DATATYPE_MISALIGNMENT
0x80000002
程序读取一个未经对齐的数据时引发的异常。
EXCEPTION_FLT_DENORMAL_OPERAND
0xC000008D
如果浮点数操作的操作数是非正常的,则引发该异常。所谓非正常,即它的值太小以至于不能用标准格式表示出来。
EXCEPTION_FLT_DIVIDE_BY_ZERO
0xC000008E
浮点数除法的除数是0时引发该异常。
EXCEPTION_FLT_INEXACT_RESULT
0xC000008F
浮点数操作的结果不能精确表示成小数时引发该异常。
EXCEPTION_FLT_INVALID_OPERATION
0xC0000090
该异常表示不包括在这个表内的其它浮点数异常。
EXCEPTION_FLT_OVERFLOW
0xC0000091
浮点数的指数超过所能表示的最大值时引发该异常。
EXCEPTION_FLT_STACK_CHECK
0xC0000092
进行浮点数运算时栈发生溢出或下溢时引发该异常。
EXCEPTION_FLT_UNDERFLOW
0xC0000093
浮点数的指数小于所能表示的最小值时引发该异常。
EXCEPTION_ILLEGAL_INSTRUCTION
0xC000001D
程序企图执行一个无效的指令时引发该异常。
EXCEPTION_IN_PAGE_ERROR
0xC0000006
程序要访问的内存页不在物理内存中时引发的异常。
EXCEPTION_INT_DIVIDE_BY_ZERO
0xC0000094
整数除法的除数是0时引发该异常。
EXCEPTION_INT_OVERFLOW
0xC0000095
整数操作的结果溢出时引发该异常。
EXCEPTION_INVALID_DISPOSITION
0xC0000026
异常处理器返回一个无效的处理的时引发该异常。
EXCEPTION_NONCONTINUABLE_EXCEPTION
0xC0000025
发生一个不可继续执行的异常时,如果程序继续执行,则会引发该异常。
EXCEPTION_PRIV_INSTRUCTION
0xC0000096
程序企图执行一条当前CPU模式不允许的指令时引发该异常。
EXCEPTION_SINGLE_STEP
0x80000004
标志寄存器的TF位为1时,每执行一条指令就会引发该异常。主要用于单步调试。
EXCEPTION_STACK_OVERFLOW
0xC00000FD
栈溢出时引发该异常。

!analyze

!analyze扩展显示当前异常或bug check的信息。一般使用!analyze -v

分析参考:https://msdn.microsoft.com/en-us/library/windows/hardware/ff560201(v=vs.85).aspx

如下述为一个对NULL指针赋值生成的dump,自动生成dump可以参考16.windbg-.dump(转储文件)

[cpp] view plaincopy
  1. 0:000> !analyze -v
  2. *******************************************************************************
  3. *                                                                             *
  4. *                        Exception Analysis                                   *
  5. *                                                                             *
  6. *******************************************************************************
  7. *************************************************************************
  8. ***                                                                   ***
  9. ***                                                                   ***
  10. ***    Your debugger is not using the correct symbols                 ***
  11. ***                                                                   ***
  12. ***    In order for this command to work properly, your symbol path   ***
  13. ***    must point to .pdb files that have full type information.      ***
  14. ***                                                                   ***
  15. ***    Certain .pdb files (such as the public OS symbols) do not      ***
  16. ***    contain the required information.  Contact the group that      ***
  17. ***    provided you with these symbols if you need this command to    ***
  18. ***    work.                                                          ***
  19. ***                                                                   ***
  20. ***    Type referenced: kernel32!pNlsUserInfo                         ***
  21. ***                                                                   ***
  22. *************************************************************************
  23. *************************************************************************
  24. ***                                                                   ***
  25. ***                                                                   ***
  26. ***    Your debugger is not using the correct symbols                 ***
  27. ***                                                                   ***
  28. ***    In order for this command to work properly, your symbol path   ***
  29. ***    must point to .pdb files that have full type information.      ***
  30. ***                                                                   ***
  31. ***    Certain .pdb files (such as the public OS symbols) do not      ***
  32. ***    contain the required information.  Contact the group that      ***
  33. ***    provided you with these symbols if you need this command to    ***
  34. ***    work.                                                          ***
  35. ***                                                                   ***
  36. ***    Type referenced: kernel32!pNlsUserInfo                         ***
  37. ***                                                                   ***
  38. *************************************************************************

首先被提示,这是没有pdb文件 的

[cpp] view plaincopy
  1. FAULTING_IP:
  2. test2+1002
  3. 01211002 8900            mov     dword ptr [eax],eax

FAULTING_IP:出现错误时的指令,这句明显就是把eax赋到[eax]中

[cpp] view plaincopy
  1. EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)

EXCEPTION_RECORD:崩溃时的异常记录,可以使用.exr查看

[cpp] view plaincopy
  1. ExceptionAddress: 01211002 (test2+0x00001002)
  2. ExceptionCode: c0000005 (Access violation)
  3. ExceptionFlags: 00000000
  4. NumberParameters: 2
  5. Parameter[0]: 00000001
  6. Parameter[1]: 00000000
  7. Attempt to write to address 00000000

这个就很详细了,尝试向0地址写入,它其实就是调试中用到的结构体:可以直接通过MSDN查到它的定义

[cpp] view plaincopy
  1. typedef struct _EXCEPTION_RECORD {
  2. DWORD    ExceptionCode;
  3. DWORD ExceptionFlags;
  4. struct _EXCEPTION_RECORD *ExceptionRecord;
  5. PVOID ExceptionAddress;
  6. DWORD NumberParameters;
  7. ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
  8. } EXCEPTION_RECORD;

注意的是:上面的NumberParameter:2表示ExceptionInformation有两个附加异常码,1和0,对于多数异常来说,这些附加异常码是没有什么用的,MSDN:For most exception codes, the array elements are undefined.只有以下两个被定义了

当ExceptionCode为EXCEPTION_ACCESS_VIOLATION时,ExceptionInformation[0]=0表示线程试图读取不可访问的数据ExceptionInformation[0]=1

表示线程试图写入不可访问的地址,很明显,这里表示第二种,具体参考MSDN

[cpp] view plaincopy
  1. DEFAULT_BUCKET_ID:  NULL_POINTER_READ

DEFAULT_BUCKET_ID:表示了本次错误属于哪种通用失败

[cpp] view plaincopy
  1. BUGCHECK_STR:  APPLICATION_FAULT_NULL_POINTER_READ_NULL_POINTER_WRITE

The BUGCHECK_STR field shows the exception code. The name is a misnomer—the term bug check actually signifies a kernel-mode crash. In user-mode debugging, the exception code will be displayed—in this case, 0x80000003.

[cpp] view plaincopy
  1. LAST_CONTROL_TRANSFER:  from 76b6337a to 01211002

堆栈的最后调用:

The LAST_CONTROL_TRANSFER field shows the last call on the stack. In this case, the code at address0x76b6337acalled a function at 0x1211002. You can use these addresses with the ln (List Nearest Symbols) command to determine what modules and functions these addresses reside in.

[cpp] view plaincopy
  1. STACK_TEXT:
  2. WARNING: Stack unwind information not available. Following frames may be wrong.
  3. 0020fbb8 76b6337a 7efde000 0020fc04 77e092b2 test2+0x1002
  4. 0020fbc4 77e092b2 7efde000 596d1564 00000000 kernel32!BaseThreadInitThunk+0xe
  5. 0020fc04 77e09285 012112b6 7efde000 00000000 ntdll!__RtlUserThreadStart+0x70
  6. 0020fc1c 00000000 012112b6 7efde000 00000000 ntdll!_RtlUserThreadStart+0x1b

堆信息

[cpp] view plaincopy
  1. STACK_COMMAND:  ~0s; .ecxr ; kb

打印堆栈的命令

[cpp] view plaincopy
  1. SYMBOL_NAME:  test2+1002

对应的符号名称

[cpp] view plaincopy
  1. IMAGE_NAME:  test2.exe

对应的模块名称

3.符号文件简介:

符号文件对于调试程序是相当重要的,通常符号文件中包含以下内容

全局变量的名字和地址

函数名,地址及其原型

帧指针优化数据

局部变量的名字和地址

源文件路径以及每个符号的行号

变量,结构等的类型信息

.lastevent、!analyze(dump分析、异常错误码查询)相关推荐

  1. 软著授权出现“数据查询异常,错误码:DB004”

    在中国版权保护中心申请软著的时候,在最后一步验证授权码(合作开发会有授权码)时,可能会提示"数据查询异常,错误码:DB004",如下图: 有博主说是因为在验证授权码界面停留时间太长 ...

  2. 关于MySQL中date字段默认值为“0000-00-00 00:00:00“导致MyBatisPlus无法正常list()而报系统异常错误码500的问题

    今天在SpringBoot整合MyBatisPlus的时候,使用自动代码生成的功能,对User表生成了entity.mapper.service代码,之后编写测试类调用userService.list ...

  3. 游戏接入华为SDK4.0(记录:实名认证问题、错误码查询和支付/游戏/账号demo下载地址)

    一.HMS SDK4.0开发前期参数准备 1.打开华为开发者管理中心:链接: 华为开发者管理中心. 按照截图上选择AppGallery Connect 2.打开AppGallery Connect 链 ...

  4. 未知的错误代码在应用程序安装:110 android,应用在华为P9手机上安装失败原因分析 (错误码:-110)...

    问题描述: 应用在之前的华为手机上都能正常安装,但是在华为P9手机上安装失败,提示错误为: 失败原因: 系统问题导致安装失败(错误码:-110) 原因分析: 开始怀疑是android的版本问题,后来看 ...

  5. 应用在华为P9手机上安装失败原因分析 (错误码:-110)

    问题描述: 应用在之前的华为手机上都能正常安装,但是在华为P9手机上安装失败,提示错误为: 失败原因: 系统问题导致安装失败(错误码:-110) 原因分析: 开始怀疑是android的版本问题,后来看 ...

  6. Autosar开发Det错误码查询工具

    1.最近在移植autosar协议栈时,经常会进入开发错误(DET)模块中,提示各种开发错误,但这些提示都是些错误码,无法与实际的含义一一对应,于是就开发了这个小工具. 2.工具采用C++/Qt开发,数 ...

  7. 软著授权出现“数据查询异常,错误码:DB004“

    解决办法:退出登录,再重新登录,进入草稿箱填写,应该就可以成功. 不会是验证码错误,因为验证码错误的话,授权码输入框失去焦点时,系统就会提示输入正确的验证码.

  8. MySQL 异常错误码使用 及 对照表 DataException

    DECLARE CONTINUE HANDLER FOR SQLWARNING, SQLEXCEPTION, NOT FOUNDBEGINGET DIAGNOSTICS CONDITION 1code ...

  9. 【Linux应用编程】Linux编程中常见错误码含义及查询方式

    文章目录 1 前言 2 错误码查询 3 错误码翻译表 1 前言   linux应用程序开发过程中,经常会遇到一些错误信息的返回,存在的可能性有,参数有误.非法访问.系统资源限制.设备/文件不存在.访问 ...

最新文章

  1. AJAX Control Toolkit 30930
  2. GRE写作-政府官员必须执行人民意愿还是独立决策?
  3. yunyang1994 tensorflow-yolov3 执行predict()函数中的sess.run()函数后返回的pred_sbbox, pred_mbbox, pred_lbbox结果
  4. Redis快速入门:安装、配置和操作
  5. 驱动级的自动按键_空调遥控器特殊按键使用方法及注意事项
  6. js学习小计6-慎用return false;
  7. 跑道防侵入,华为云ModelArts平台助力航空器识别AI模型开发
  8. windows 系统更新 WSUS的安装与部属
  9. Atitit 远程存储与协议 mtp ptp rndis midi nfs smb webdav ftp Atitit mtp ptp rndis midi协议的不同区别 1. PTP: 图
  10. POJ2676 Sudoku
  11. VOD崛起《暮光之城》带动电影同步发行模式
  12. 手工制作学数学——三维空间八个象限
  13. 紫猫安卓按键之其他命令
  14. matlab gui双音拨号,用matlab GUI功能模拟DTMF拨号系统.doc
  15. 大数据Hadoop集群搭建
  16. 华为P9黑屏的解决方案-更换屏幕
  17. nginx根据url中的参数进行转发
  18. 算法笔记——常见DP问题汇总
  19. 网站设计分析:banner中的字体结构
  20. 神经网络实现逻辑运算,神经网络 最小二乘法

热门文章

  1. eclipse中的java包awt_Eclipse中打包java程序
  2. 串行口通信c语言代码,问一下单片机串行口通信用c语言实现的问题
  3. 怎么样才能学好java_单人拉丁舞应该怎么样才能学好?初学者需要做到的4点要求...
  4. 指纹图谱相似度评价软件_不同产地佛手指纹图谱及模式识别研究
  5. NBT | 微生物研究所王军组在AI赋能挖掘微生物组功能多肽方面获得新进展
  6. 国际千人基因组计划数据库怎么用起来?
  7. Science亮点!ExSeq:完整生物组织的原位空间转录组分析
  8. 哈佛大学刘小乐教授讲授的计算生物学和生物信息学导论 (2020 视频+资料)
  9. Retouch Pro for Mac(ps图像修饰插件)支持ps 2021
  10. query登录linux命令,在Linux系统中使用sqlcmd命令连接与查询SQL Server