metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-12-06 01:05 pm

OutputDebugString

Ради тренировки мозга сделал модуль на хаскеле с функциями для трассировки с помощью виндовской OutputDebugString:
ODS

FFI не так уж и пугающе выглядит. Хотя насчет того, не умрет ли это все в многопоточном приложении, если вызвать unsafe версии - уверенности никакой нет.


module ODSTrace (trace) where

import System.IO.Unsafe
import Foreign.C.String

putTraceMsg :: String -> IO ()
putTraceMsg msg = do
withCString msg $ \cmsg ->
ods cmsg

foreign import stdcall unsafe "windows.h OutputDebugStringA"
ods :: CString -> IO ()

trace :: String -> a -> a
trace string expr = unsafePerformIO $ do
putTraceMsg string
return expr