Debugging

We don't have rich debugging features yet. Use printf macros. Good luck!

How to deal with dead locks in IPC

Even if you don't use locks like mutex (note that we don't provide such a thing), your program could be blocked forever by an IPC operation.

The common case is that both your program and the destination task are trying to send a message to each other. You can check it by ps command in the kernel debugger:

kdebug> ps
#1 vm: state=blocked, src=0
#2 display: state=blocked, src=0
#3 e1000: state=blocked, src=6
  senders:
    - #6 tcpip
#4 ps2kbd: state=blocked, src=0
#5 shell: state=blocked, src=0
#6 tcpip: state=blocked, src=3
  senders:
    - #3 e1000
#7 webapi: state=blocked, src=0

Notice that e1000 and tcpip are blocked and they're sending to the other server.