轻量级的.NET调试器?

问题描述 投票:24回答:8

我经常需要在测试机器上调试.NET二进制文件(通过测试机器,我的意思是机器上没有安装Visual Studio,它经常重新映像,它与我开发的机器不同,等等)。

我喜欢Visual Studio调试器,但是对于我来说,在新映像的测试机器上安装可视化工作室只是为了调试断言或崩溃(安装时间太长,占用空间太大等)并不实用。

我真的很喜欢一个快速安装的程序,它可以进入一个正在运行的进程,让我指定符号/源代码的位置,让我直接进入调试。对于原生二进制文件,windbg工作得很好,但是我没有找到任何类似于托管二进制文件的东西。有什么建议?

(作为旁注,我知道视觉工作室远程调试功能,但由于某种原因,它似乎永远不会对我一致...我经常有连接问题)

.net debugging
8个回答
9
投票

对于比MDbg或cordbg更好的界面,请看一下DbgCLR - 一个只处理托管代码的Visual Studio调试器(至少看起来像一个)的简化版本。它附带了.NET Framework(我不确定它是否在运行时或者您是否需要Framework SDK):

请注意,不推荐使用cordbg以支持MDbg(即使MDbg没有所有cordbg的功能):

在写这篇文章时回顾MDbg,我发现有一个可用于MDbg的GUI包装器(我还没试过):


5
投票

我终于找到了Windbg的扩展,它正是我想要的:Sosex.dll,让我使用windbg调试托管应用程序,只需要很少的安装。我已经使用了一年多了,而且我遇到过的每一个调试场景都没有错误。


4
投票

总是有mdbgcordbg,但我建议深入研究为什么远程调试不能始终如一地工作。

VS2005 / 8似乎比这里的早期版本更可靠(虽然我主要是不受管理的),它使你不必在目标机器上访问符号。


3
投票

ILSpy的第2版包含一个调试器。它的工作真棒!

它仍然处于非常早期的阶段,但已经帮了我几次。

请注意错误! :)


3
投票

使用dnSpy

dnSpy是一个调试器和.NET组装编辑器。即使您没有任何可用的源代码,也可以使用它来编辑和调试程序集。

太棒了。非常小巧轻便。无需安装或配置。它的界面与Visual Studio完全相同。甚至它的快捷方式也与VS相同。

特征:

Debugger

  • 调试.NET Framework,.NET Core和Unity游戏程序集,无需源代码
  • 设置断点并进入任何程序集
  • 当地人,手表,汽车窗户
  • 变量窗口支持将变量(例如,解密的字节数组)保存到磁盘或在十六进制编辑器(内存窗口)中查看它们
  • 对象ID
  • 可以同时调试多个进程
  • 打破模块负载
  • 跟踪点和条件断点
  • 导出/导入断点和跟踪点
  • 调用堆栈,线程,模块,进程窗口
  • 打破抛出异常(第一次机会)
  • 变量窗口支持评估C#/ Visual Basic表达式
  • 可以调试动态模块(但由于CLR限制,不是动态方法)
  • 输出窗口记录各种调试事件,默认情况下显示时间戳:)
  • 可以调试在运行时解密自己的程序集,dnSpy将使用内存中的映像。您还可以强制dnSpy始终使用内存中的映像而不是磁盘文件。
  • 公共API,您可以编写扩展或使用C#Interactive窗口来控制调试器

Assembly Editor

  • 可以编辑所有元数据
  • 使用IntelliSense在C#或Visual Basic中编辑方法和类,无需源代码
  • 在C#或Visual Basic中添加新方法,类或成员
  • 用于低级IL方法体编辑的IL编辑器
  • 可以编辑低级元数据表。这在内部使用十六进制编辑器。

Hex Editor

  • 单击反编译代码中的地址,转到十六进制编辑器中的IL代码
  • 反过来,在十六进制编辑器中的IL主体中按F12转到反编译代码或位的其他高级表示。很高兴找到补丁修改的语句。
  • 重点介绍.NET元数据结构和PE结构
  • 工具提示显示有关所选.NET元数据/ PE字段的更多信息
  • 转到位置,文件,RVA
  • 转到.NET元数据标记,方法体,#Blob / #Strings / #US堆偏移或#GUID堆索引
  • 按照参考(Ctrl + F12)

Other

  • BAML反编译器
  • 蓝色,浅色和深色主题(以及深色高对比度主题)
  • 书签
  • C#Interactive窗口可用于脚本dnSpy
  • 搜索类,方法,字符串等的程序集
  • 分析类和方法用法,查找调用者等
  • 多个选项卡和选项卡组
  • 引用被突出显示,使用Tab / Shift + Tab移动到下一个引用
  • 转到入口点和模块初始化程序命令
  • 转到元数据标记或元数据行命令
  • 代码工具提示(C#和Visual Basic)
  • 导出到项目

1
投票

你尝试过使用Cracked.NET吗?

它是一个运行时调试和脚本工具,使您可以访问计算机上运行的任何.NET桌面应用程序的内部。


1
投票

你可以查看MDbg:http://blogs.msdn.com/jmstall/archive/2006/11/22/mdbg-sample-2-1.aspx。看起来它至少带有.NET 3.5 SDK(它可能包含在2.0+中)。

Windbg有托管扩展(我相信称为SOS),但我不知道它们是否允许源级调试。


0
投票

也许你可以尝试使用Live Tuning结合Ocf Server

它本身不是调试器,但在应用程序和实时调整之间建立连接非常容易。就像,字面上3行代码。然后,您可以访问您选择发布的所有变量。

我发现在尝试调试程序时没有访问反编译代码或真正的调试器时它很有用。你不可能真的有断点但事实证明有时候更好的调试方法。

© www.soinside.com 2019 - 2024. All rights reserved.