VS2012中使用SOS调试CLR

之前看了《用WinDbg探索CLR世界》的一些列文章,发现SOS真的是一个非常好的调试.net的工具,

然后又惊喜的在http://blogs.msdn.com/b/mariohewardt/archive/2012/06/05/visual-studio-2012-and-windbg-integration.aspx 上看到原来windbg已经被集成

到VS2012的IDE中。本文主要讲解在VS2012中调用SOS的基本步骤

1 SOS是一个非托管的DLL,要使用SOS调试,首先需要打开本地的非托管代码调试选项,

Debug--->Options and Settings --->Suppress JIT optimization on module load(Managed only),将其取消

然后需要打开项目的本地调试选项

project--->yourproname properties --->Debug--->Enable native code debugging

2 按步骤一设置好以后,就可以开始我们的SOS之旅了。

首先我们需要定位到运行的某个时刻,F9在某条语句上设置断点,F5运行至Console.Read(),

然后我们打开immediate窗口,Debug--->Window--->Immediate

输入.load SOS

输入成功以后 会显示

输入! help可以查看SOS的使用帮助,如果出现PDB symbol for clr.dll not loaded,可以通过选中

Tools ---> Option--- > Debugging ----> Symbols-->Microsoft Symbol Servers’ checkbox来解决

3 如果我们要查看某个对象的信息,可以输入!dumpstackobjects,查看所有在CLR中已经生成的对象信息,

接下来我们看下object o的具体信息

输入!dumpobj(019f240f),没错,括号中的参数就是dumpstackobjects命令所显示的16进制数

由此可以看到,一个空的对象在GC堆中占用的内存是12个bytes,在<CLR VIR C#>中提到,其中有8个bytes是对象类型指针和同步索引快,剩下4个bytes为空

很有意思的是,如果我们定义一个对象,只含有一个int型的私有字段,那么它所占用的内存也是12个bytes

本文就到这里,CLR底层的世界其乐无穷,期待有心人去探索

来源于

http://www.cnblogs.com/marsblog/p/3275650.html

时间: 2024-10-17 04:54:53

VS2012中使用SOS调试CLR的相关文章

SOS.dll(SOS 调试扩展)

SecAnnotate.exe(.NET 安全批注器工具) SignTool.exe(签名工具) Sn.exe(强名称工具) SOS.dll(SOS 调试扩展) SqlMetal.exe(代码生成工具) Storeadm.exe(独立存储工具) Tlbexp.exe(类型库导出程序) Tlbimp.exe(类型库导入程序) Winmdexp.exe(Windows 运行时元数据导出工具) Winmdexp.exe 错误消息 Winres.exe(Windows 窗体资源编辑器) 此文章由人工翻译

SOS 调试扩展 (SOS.dll) 《第五篇》

SOS调试扩展让你可以查看在公共语言运行时里面运行的代码的有关信息.例如,你可以使用SOS调试扩展显示托管堆的有关信息,查找堆的错误,显示运行时使用的内部数据类型,以及查看在运行时里面运行的所有托管代码的有关信息. 使用SOS调试扩展的办法是把它装入到WinDbg.exe调试器,或者Visual Studio 2005或它的更早版本.你能够在WinDgb.exe里或者在Visual Studio的即时窗口里面执行令来载入它. 在Windbg.exe中装载SOS的命令是: .loadby sos

Windbg SOS and CLR版本不一致的解决方案

由于测试服务环境与Windbg运行环境的差异,这就可能出现Windbg在分析dump文件时.net sos.dll和mscordacwks.dll版本不一致问题,从而导致windbg调试器的扩展命令无法正常使用,具体的解决方法如下: 1.首先定义Windgb symbols路径(如:d:\temp),接着在symbols路径下创建一个文件夹来存放.net sos.dll和mscordackwks.dll(如:d:\temp\clr1026): 2.然后将dump运行环境,即测试服服务器上.net

在VS2012中采用C++中调用DLL中的函数 (4)

这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人Blog在C++中调用DLL中的函数(1)(2)(3) 但是问题出现了,上面讲述的步骤很详细但是在自己运行的时候却会出现错误,于是今天在使用google“vs2012 c++调用dll”时,发现了一篇MSDN上的指南:http://msdn.microsoft.com/zh-cn/library/m

在VS2012中采用C++中调用DLL中的函数(4)

转自:http://www.cnblogs.com/woshitianma/p/3683495.html 这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人Blog在C++中调用DLL中的函数(1)(2)(3) 但是问题出现了,上面讲述的步骤很详细但是在自己运行的时候却会出现错误,于是今天在使用google"vs2012 c++调用dll"

使用BabeLua在cocos2d-x中编辑和调试Lua

使用BabeLua在cocos2d-x中编辑和调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境.具有Lua语法高亮.语法检查,自己主动补全.高速搜索,注入宿主程序内对Lua脚本进行调试,设置断点观察变量值.查看堆栈信息等功能. 怎样安装BabeLua 请參考<系列1-BabeLua入门> 设置Cocos2d-x项目 在VS菜单上选择:[lua][Settings]打开设置界面,例如以下图(左上角选中[Lua?Folder]) ? 如上图分别设置: (1)Lua?s

基于Maven的web项目在Eclipse中使用Tomcat调试

以前开发用过jetty来调试maven项目,不过那时也有点浑浑噩噩的,就是使用而已,业余时间都奉献给了游戏.最近在鼓捣maven,就记录一下最近搭建Eclipse中使用Tomcat调试maven项目的过程,以后忘记或者中间有什么问题时可以查到. 废话不多说,下面开始搭建: 1. 安装Maven(配置Maven环境变量+Eclipse中的Maven插件) 这步就不多说了,网上一搜一大把,要说明的只有一点,第一次配好Maven插件,一定要更新一次远程库的索引,这样添加依赖的时候就不会出现搜不到那个j

DICOM医学图像处理:DCMTK在VS2012中的配置

背景: 最近由于项目需要,将原本的开发IDE环境由VS2008升级到了VS2012.本以为编译完成后的DCMTK开源库可以直接从VS2008移植到VS2012.但是通过项目属性添加完包含目录和依赖库后,编译会出现大量的链接错误(大多是跟dcmdata.lib.oflog.lib有关). 解决方法: 重新按照原本的博客前辈柳北风儿(大神目前已经博客转移到网易:http://blog.163.com/[email protected]/),利用CMake工具,选择VS2012本地编译器对DCMTK3

Json的本地写入和读取,也可以方便在开发中数据的调试

不知道小伙伴们,在开发中,数据调试的过程中,尤其是很多状态的情况下调试,是不是总是麻烦后台的小哥改变不同的状态,总感觉这样太麻烦了, 那么就可以,把数据写入到本地,然后去沙盒中,找到这个写入的文件,直接去改变这个文件中的数据.之后就可以不用再网络请求了,可以直接读取这个文件的数据来调试自己的界面了, YXJsonSaveOrLoadTool.h @interface YXJsonSaveOrLoadTool : NSObject +(instancetype)shareTool; //** 写入