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。
我正在通过 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。