Отладка F#. CLR

Я хочу немного больше взглянуть на результирующий ASM (F#->IL->ASM), который генерируется для определенных функций, чисто из любопытства и обучения.

На мой взгляд, лучше использовать SOS.dll, но я столкнулся с небольшим препятствием...

Давайте начнем с самого простого кода на F#. Файл называется test.fs.

[]
  let main _ = 
    stdin.ReadLine()
    1

Мы определяем точку входа, которая принимает 'a (ограничена, не говоря нам (?), массивом строк по очевидным причинам (пустяки: нельзя использовать "'a" в функции точки входа?)). Затем мы ждем ввода пользователя. Это значительно упрощает взлом Windbg вручную. скомпилируйте test.fs для создания test.exe

Откройте Windbg, откройте test.exe внутри Windbg:

>!load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll
>g

Windbg запустит наш код и дождется цикла readline, затем мы можем ввести что-то в окно консоли, и Windbg завершит работу. .

Теперь, как нам разместить точку останова на main, чтобы мы могли прервать передциклом readline?

>!bpmd test.exe Test.main; g

Затем windbg войдет в цикл readline... Я ожидал, что он сломается до цикла readline, точка останова должна быть плохо определена. После этого я попробовал множество вариантов точек останова: !bpmd test.exe Test.main; !bpmd test.exe Тест; !bpmd test.exe основной; !bpmd test.exe Главное; !bpmd test.exe Main.test !bpmd test.exe Test... ect (но, возможно, пропустил один) совершенно очевидно, что я делаю что-то не так, я также пытался использовать модуль xx = ...,

Вопрос: Кто-нибудь может подсказать, как установить точку останова в управляемом коде F# из Windbg с помощью расширений SOS?

Ссылки:

http://winterdom.com/2011/06/having-fun-with-windbg

http://social.msdn.microsoft.com/Forums/en-US/clr/ thread/a0ab6170-d53b-4c95-8f5e-efaf4e014fcd

http://blogs.msdn.com/b/vancem/archive/2006/09/05/742062.aspx

5
задан 11 May 2012 в 02:13
поделиться