Haskell:通过FFI

时间:2015-07-20 19:00:30

标签: debugging haskell ffi

我通过FFI在Haskell中导入一些东西,并希望能够用lldb调试它们。例如,我可能有以下Haskell文件(test.hs):

main = do
   foo
   return()

foreign import ccall "foo" foo :: IO ()

以下C文件(ctest.c):

#include <stdio.h>

void foo(){
    printf("test\n");
}

然后我可以用ghc test.hs ctest.c编译它。如果我通过LLDB运行可执行文件,我可以在foo设置断点,但是,它只给出了汇编代码,例如:

test`foo: ->  
0x1000019e0 <+0>: pushq  %rbp
0x1000019e1 <+1>: movq   %rsp, %rbp
0x1000019e4 <+4>: subq   $0x10, %rsp
0x1000019e8 <+8>: leaq   0x33eb31(%rip), %rdi      ; "test\n"

有没有办法告诉GHC编译我通过FFI导入的-g的C文件,以便我可以获得调试符号?

1 个答案:

答案 0 :(得分:6)

GHC提供了一个接口,可以将选项传递给许多内部组件,包括C编译器。您正在寻找的选项是optc

例如,您可以编写ghc -optc -g Main

您可以看到所有类似选项的列表here