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

Haskell: debug C function imported through 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   [=13=]x10, %rsp
0x1000019e8 <+8>: leaq   0x33eb31(%rip), %rdi      ; "test\n"

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

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

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

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