Debugging F#调试。CLR

Debugging F#调试。CLR,debugging,f#,clr,windbg,sos,Debugging,F#,Clr,Windbg,Sos,我想更多地了解一下为某些函数生成的ASM(F#->IL->ASM),这纯粹是出于好奇和学习 在我看来,答案是使用SOS.dll,但我遇到了一点障碍 让我们从F#中最基本的代码开始。文件名为test.fs [<EntryPoint>] let main _ = stdin.ReadLine() 1 Windbg将运行我们的代码并等待readline循环,然后我们可以在控制台窗口中键入一些内容,Windbg将退出 现在,我们如何在main上放置断点,以便在read

我想更多地了解一下为某些函数生成的ASM(F#->IL->ASM),这纯粹是出于好奇和学习

在我看来,答案是使用SOS.dll,但我遇到了一点障碍

让我们从F#中最基本的代码开始。文件名为test.fs

[<EntryPoint>]
  let main _ = 
    stdin.ReadLine()
    1
Windbg将运行我们的代码并等待readline循环,然后我们可以在控制台窗口中键入一些内容,Windbg将退出

现在,我们如何在main上放置断点,以便在readline循环之前中断

>!bpmd test.exe Test.main; g
windbg随后将进入readline循环。。。我原以为它会在readline循环之前中断,断点一定是定义错误的。在此之后,我尝试了许多不同的断点:!bpmd test.exe test.main!bpmd test.exe test!bpmd test.exe main!bpmd test.exe Main!bpmd test.exe Main.test!bpmd test.exe测试。。。ect(但可能遗漏了一个)很明显我做错了什么,我也尝试过使用模块xx=

问题:有人能告诉我如何使用SOS扩展在windbg中的F#托管代码中放置断点吗

参考资料:


试试看!sosex.mbm,它使用*/?与命令行类似的通配符语法。也试试看!sosex.mbp,它接受源文件、行号和可选列号。要拆卸,请使用!求救,dumpil或!sos.U。对于source/IL/native的交错反汇编,请尝试!sosex.muf.

史蒂夫,谢谢你的回复,我不知道sosex,很酷。编辑:我在尝试时大发雷霆!mbm*主*!mbm*测试*;但我不能让它打破,我是不是误解了通配符的要求?编辑2:修正了通配符。万岁!mbm*!测试。主要工作!,现在,为什么这不适用于!bpmd?(你有SosEx的消息来源吗?)出于各种原因,一些个人原因,一些法律原因,我将关闭消息来源。虽然我在MS工作之前写过sosex,但现在我在这里并继续在sosex上工作,我不能冒险让机密细节进入源代码和野外。明白,如果有人有兴趣学习为托管代码编写dbg扩展,是否有可用的公共资源?如果有一个.net库可以像您的扩展一样在调试器之外查看jit后asm,那就太酷了!!编辑:很遗憾,调试托管代码的方法都没有文档记录。我从转子的来源了解到。Rotor包含SOS旧版本的源代码。自从Rotor之后,接口和数据结构发生了重大变化,因此我不得不依靠逆向工程来填补一些空白。
>!bpmd test.exe Test.main; g