LoginSignup
2
1

More than 5 years have passed since last update.

This article is F# Advent Calendar2017 7th day
see : F# Advent Calendar2017

Summary

I just try to debug F# code with sdb!

Like this

image.png

What is mono/sdb?

A command line client for the Mono soft debugger.
mono/sdb

Environment


$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.13.1
BuildVersion:   17B1003

$ uname -a
Darwin callmekoheis-MacBook-Air.local
17.2.0 Darwin Kernel
Version 17.2.0:
Fri Sep 29 18:27:05 PDT 2017;
root:xnu-4570.20.62~3/RELEASE_X86_64 x86_64

$ mono --version
Mono JIT compiler version 5.0.1.1 (2017-02/5077205 Sun Sep 17 18:29:46 BST 2017)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           normal
    SIGSEGV:       altstack
    Notification:  kqueue
    Architecture:  amd64
    Disabled:      none
    Misc:          softdebug 
    LLVM:          supported, not enabled.
    GC:            sgen (concurrent by default)

Prepare

install mono/sdb

$ git clone https://github.com/mono/sdb

$ cd sdb

$ git submodule update --init --recursive

$ make

check


$ sdb --version
Mono soft debugger (sdb) 1.5.6503.20649

$ which sdb
/usr/local/bin/sdb

setting


$ which mono
/usr/local/bin/mono

// set location of mono
$ sdb
(sdb) cfg s RuntimePrefix /usr/local/ ( was /usr )

Debug


// write code
$ vim sample.fsx 

namespace ABC

module DEF =
    let bar() =
        stdout.WriteLine("abc")

    let foo (str:string) =
        stdout.WriteLine(str)
        bar()

    [<EntryPointAttribute>]
    let main _ =
        let s = "Foo!"
        foo s
        stdout.WriteLine("callmekohei")
        0

// compile
$ fsharpc -g --optimize- sample.fsx 

// launch sdb
$ sdb
Welcome to the Mono soft debugger (sdb 1.5.6548.37600)
Type 'help' for a list of commands or 'quit' to exit

// set break point
(sdb) bp add func ABC.DEF.foo
Breakpoint '0' added for method 'ABC.DEF.foo'

// run 
(sdb) r sample.exe
Inferior process '8743' ('sample.exe') started
Hit method breakpoint on 'ABC.DEF.foo'
#0 [0x00000000] ABC.DEF.foo at /Users/callmekohei/tmp/xxx/sample.fsx:8
        stdout.WriteLine(str)

// look source code
(sdb) src
       1:    namespace ABC
       2:    
       3:    module DEF =
       4:        let bar() =
       5:            stdout.WriteLine("abc")
       6:    
       7:        let foo (str:string) =
       8:            stdout.WriteLine(str)  // <--- color green!
       9:            bar()
      10:    
      11:        [<EntryPointAttribute>]
      12:        let main _ =
      13:            let s = "Foo!"
      14:            foo s
      15:            stdout.WriteLine("callmekohei")
      16:            0

// continue
(sdb) c
Inferior process '8743' ('sample.exe') resumed
Foo!
abc
callmekohei
Inferior process '8743' ('sample.exe') exited with code '0'

// quiet
(sdb) q
Bye

Point

compile option --optimize-


$ fsharpc -g --optimize- sample.fsx 
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1