2015-07-20 52 views
3

我正在通過FFI導入Haskell中的一些東西,並希望能夠用lldb調試它們。例如,我可能有以下哈斯克爾文件(test.hs):Haskell:通過FFI導入調試C函數

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編譯C文件我通過FFI與-g導入,以便我可以獲得調試符號?

+0

你看過[這裏](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/options-phases.html#forcing-options-through)嗎? optc可能是你正在尋找的。 – crockeea

+0

這正是我正在尋找的。謝謝!如果你想把這個問題轉化爲答案,我會很樂意接受它。 – Matt

回答

5

GHC提供了一個接口來將選項傳遞給許多內部組件,包括C編譯器。您正在尋找的選項是optc

例如,您可以編寫ghc -optc -g Main

您可以看到所有類似選項列表here

+0

我猜這是一個等價的方法是在Cabal文件中有'cc-options:-g -O0'? – ocramz

+0

這只是將選項傳遞給GHC的另一種方式。 – crockeea