The topic has a long history [1], but since then nothing has actually changed. It's easy to understand: INRIA people are busy and there are probably quite few Ocaml users in the Windows land to worry about. So I decided to do something myself :) (as it was with mingw port several years ago).
Let's go into detail. Ocam debugger consists of the the two parts: the client (byterun/debugger.c linked into debuggee) and the server (ocamldebug). The following issues should be addressed to make a Windows port:
1. Checkpointing is done via Unix fork() (client)
The most problematic one. I have spend a fair amount of time trying to find an acceptable solution.
a) direct port of fork() to Windows. There is a BSD-licenced Windows fork() in tcsh sources [2] that could be used. It's based on Cygwin ideas. But how to handle dynamically loaded DLLs (loaded via LoadLibrary())? I asked the author (Amol Deshpande) and he replied:
"DLLs that are dynamically loaded are a can of worms. I would not support those if I were you."
BTW, does Cygwin do this right? I doubt at least.
b) some checkpoint library. Although Web search gives many references, e.g. [3], I have not found yet anything ready-to-use, even commercial!
2. Unix select (server)
It is a problem because server waits for network and console events simultaneously. To work on Windows the main loop should probably be multi-threaded.
3. Unix sockets (client & server)
Probably can be ignored. Internet sockets are quite enough.
So what is done now.
- Client
It's ported without (1) and (3). To me it's quite usable even without checkpoints.
- Server
I don't bother to do (2) right now (until the whole idea is accepted). Currently I use cygwin-compiled ocamldebug with checkpoints and Unix sockets disabled by default. It works well with the native Win32 clients.
- OcaIDE
Yes, with minor changes in OcaIDE the debugged works there.
If it's interesting for anyone I can publish a patch against Ocaml 3.10.1
- Dmitry Bely
[1] http://caml.inria.fr/pub/ml-archives/caml-list/1999/03/f44178e212e78826bcbdee52ddf6fd91.en.html
http://caml.inria.fr/pub/ml-archives/caml-list/2002/10/ed776d7376ed7a9676d4a9981372ccdf.fr.html
[2] http://www.tcsh.org/MostRecentRelease
[3] http://www.usenix.org/publications/library/proceedings/usenix-nt98/full_papers/srouji/srouji_html/srouji.html