OutputDebugString
Dec. 6th, 2009 01:05 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Ради тренировки мозга сделал модуль на хаскеле с функциями для трассировки с помощью виндовской 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
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