调试.net应用程序时,有时会在windbg中收到错误消息。以下是我最常遇到的几个问题。

Failed to start stack walk---启动堆栈遍历失败

如果你运行sos命令!clrstack在线程上显示.net堆栈,而此线程是.net线程,但它当前未运行任何.net代码,sos将提示失败“Failed to start stack walk: 80004005.”。这并不意味着进程或调试器有任何问题。这仅仅意味着sos不能显示堆栈,因为没有堆栈。如下

Unable to walk the managed stack---无法遍历托管堆栈

如果你在本机线程(即没有对应的System.Threading.thread的线程)上运行!clrstack,sos将显示以下消息。

Following frames may be wrong---以下帧可能错误

如果windbg无法解析某个符号,它将在第一次遇到该符号时出错,告诉您找不到该符号文件,并且在随后的所有时间遇到该符号时,它都将向您发出警告,告诉您它无法正确展开堆栈。当您看到此消息时,这意味着您在警告说明下面看到的任何内容都可能不正确,因此您无法从此处信任堆栈。例如,在本例中,我们可以看到堆栈正在等待输入关键节,DataLayer.dll中的某个方法正在尝试输入关键节,但是,由于我们没有DataLayer.dll的适当符号,因此无法确定它是否是DllUnregisterServer方法。实际上,DllUnregisterServer很可能只是最后一个导出的符号名,否则我们将处于0x43fb的偏移量,这意味着此方法将非常长。
我们不仅不知道这是否是正确的方法名,而且当windbg没有正确的符号时,它甚至可能会丢失堆栈帧,所以您根本不应该信任这个堆栈。

Failed to load data access DLL, 0x80004005---加载数据访问DLL失败

此错误意味着a加载的sos.dll版本不正确,即在本例中,我在1.1转储中加载了2.0版本,或b)找不到正确的mscordacwks.dll版本。如果是选项b,请尝试运行!sym noise 和 run.cordell-ve-u-l.当然,正如错误消息中提到的,确保有一个完整的转储而不是一个小型转储。

在windbg调试.net时遇到的问题的更多相关文章

  1. 【转】WinDbg调试器:启动程序时自动连接调试器方法

    当我们调试服务进程或子进程时,无法直接用调试加载进程的方式启动,此时需要在启动程序时自动连接调试器方法: 第一步:注册表展开到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft ...

  2. 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令

    调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...

  3. 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置

    调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (三)使用Windbg调试SQLSERVER ...

  4. 开源项目asmjit——调用自定义方法demo以及windbg调试

    asmjit是一个开源项目,使用它可以将代码即时的编译成机器码,也就是所谓的jit技术. 初次接触这个项目,编写了一个demo,学习它的使用方法. 现将编写的demo以及调试jit生成的机器码的过程总 ...

  5. 使用WinDbg调试SQL Server查询

    上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...

  6. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  7. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  8. WinDbg 调试.net程序

    WinDbg支持以下三种类型的命令: ·        常规命令,用来调试进程 ·        点命令,用来控制调试器 ·        扩展命令,可以添加叫WinDbg的自定义命令,一般由扩展dl ...

  9. 内核,配置WinDbg,调试操作系统(双机调试)

    配置WinDbg,调试操作系统(双机调试) PS: 设置双机调试之前,请先安装虚拟机,并且安装好XP系统.这里不做演示.直接设置. 一丶WinDbg的设置 1) 配置WinDbg的环境,在path变量 ...

随机推荐

  1. Go grpc 与 protobuf

    现在很多微服务内部的通信协议都采用rpc,性能高,安全.而grpc则是google退出的rpc plus. protobuf是传输协议,性能高,强大. 来一个server client的通信demo, ...

  2. Win10各个PC版本的差别

    新的电脑有的已经不能够支持安装win7了,也就是说新电脑的硬件支持只能安装win10.那么win10有都有那些版本呢?这些版本之间又有什么样区别?我相信很多人并不是很了解.今天就来整理一下这些资料.据 ...

  3. Django使用distinct报错:DISTINCT ON fields is not supported by this database backend

    具体错误提示是:django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database back ...

  4. Golang资料集

    <Platform-native GUI library for Go> 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X ...

  5. C#类型成员:构造函数

    一.构造函数 构造函数是类的特殊方法,它永远不会返回值(即使是void),并且方法名和类名相同,同样支持重载.在使用new关键字创建对象时构造函数被间接调用,为对象初始化字段和属性的值. 无参构造函数 ...

  6. k8s与监控--k8s部署grafana6.0

    原文参考:https://segmentfault.com/a/1190000018335241

  7. python 4. path的定义及参数,re_path

    path定义 path函数的定义为:path(route,view,name=None,kwargs=None) 可以查看官方文档 → 官方文档,下面是取自官方文档关于path的参数 函数 path( ...

  8. tf.nn.softmax_cross_entropy_with_logits()函数的使用方法

    import tensorflow as tf labels = [[0.2,0.3,0.5], [0.1,0.6,0.3]]logits = [[2,0.5,1], [0.1,1,3]] a=tf. ...

  9. 【转载】C#中double.TryParse方法和double.Parse方法的异同之处

    在C#编程过程中,double.TryParse方法和double.Parse方法都可以将字符串string转换为double类型,但两者还是有区别,最重要的区别在于double.TryParse方法 ...

  10. JavaScript之控制标签属性

    var pic=document.getElementById('pic'); var obtn=document.getElementById('btn'); console.log(pic.get ...