摘要:
在前面已经介绍过,JIT编译器编译了一个函数并将其放在内存中。如果我们知道JIT编译器保存机器代码的位置,就可以使用调试器的bp命令来设置 断点。我们再次使用在前面介绍过的03breakpoint.exe程序,并且试验能否在AddAndPrint函数上设置一个断点。具体来说,我们希望 在第二次调用这个函数时设置一个断点,以便分析其中潜在的错误。在调试器下启动03breakpoint.exe,并继续执行直到程序提示按任意键。按下 任意键,等待并直到第二次提示按下任意键。此时,按下CTRL-C进入调试器。这是在第二个AddAndPrint函数中设置断点的起始位置。第一个任务 就是判断这个函数是否已 阅读全文
摘要:
在调试.NET程序时,调试器可以加载一个辅助DLL,称为mscordacwks.dll,这个DLL用于输出托管代码调试过程中的各种信息(例 如SOS命令的输出)。加载mscordacwks.dll的路径取决于被加载到进程中的mscorwks.dll的路径。在实时调试(live debugging)中通常不存在问题,因为我们希望加载与已加载的mscorwks.dll相对应的mscordacwks.dll版本,但在事后调试 (postmortem debugging)中则可能出现版本不匹配的情况。要想控制调试行为,我们可以使用元命令cordll,并告诉调试器加载 mscordacwks.dll的确 阅读全文
摘要:
SOS调试器扩展的DLL(sos.dll)与程序使用的CLR版本是相关的。因此,在发布每个CLR的主版本的同时,会发布一个新版本的SOS调试器扩展,以确保这个DLL可以使用该版本CLR的新功能。SOS调试器扩展是作为运行时的一部分发布的,它位于以下路径:我们可以在上面的路径中指定需要调试哪一个框架版本,并且通过元命令load将它传递给调试器。例如,在我的系统上可以使用以下调试器命令来加载与CLR 2.0版本相对应的SOS:为什么需要多个版本为什么需要多个版本的SOS调试器扩展?因为SOS调试器扩展需要了解CLR的内部细节,所以每当对CLR进行修改或者增强时,就必须生成一个新版本的SOS。刚才给 阅读全文
摘要:
在非托管调试器中可以使用两种不同类型的命令。第一种被称为元命令。元命令是指在调试引擎中内置的命令。例如help、sympath以及cls 等,都是元命令。当执行元命令时,必须在命令前面加上前缀“.”。例如,要设置符号路径,我们可以使用元命令sympath,如下所示:要得到元命令的完整列表,可以使用help命令。另一种类型的命令被称为扩展命令。扩展命令是在调试器引擎之外的独立DLL中实现的,这些DLL也 被称为调试器扩展。 在发布非托管调试器时,通常带有一定数量的调试器扩展DLL,这些DLL由Microsoft的不同技术小组开发,分别用于对某种特定技术中的问题进行调 试。除了随调试工具一起发布的 阅读全文