Haskell:通过FFI导入的调试C函数

Mat*_*att 3 debugging haskell ffi

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

main = do
   foo
   return()

foreign import ccall "foo" foo :: IO ()
Run Code Online (Sandbox Code Playgroud)

以下C文件(ctest.c):

#include <stdio.h>

void foo(){
    printf("test\n");
}
Run Code Online (Sandbox Code Playgroud)

然后我可以编译它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"
Run Code Online (Sandbox Code Playgroud)

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

cro*_*eea 6

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

例如,你可以写ghc -optc -g Main.

您可以在此处查看所有类似选项的列表.