2012-11-28 56 views
1

我創建了一個文件法和test.l創建從它的lex.yy.c,然後我用gcc -g標誌編譯無法調試lex.yy.cc文件

我將它鏈接和我沒有編譯我的代碼的其餘部分,這使得調用yylex(),但是,在GDB中,我似乎無法在yylex()調用中潛水。

我在做什麼錯?我在yylex()方法本身中添加了斷點,並且這會導致gdb在我調用yylex()時停止,但從不在函數內部。

我是否需要用調試符號或其他東西來編譯-l庫?

我知道它正在運行,因爲我用-d創建了我的lex.yy.c文件,所以我看到了接受令牌和輸出的輸出。

感謝

+0

我希望這是過分簡單化的,但是你是否使用了'-g'選項以及編譯? –

+0

是的......問題如下所述。 – Derek

回答

3

我覺得你落下的那法,或至少彎曲,使用#line指令設置用於錯誤的文件,並象徵性的調試,到.l文件的事實犯規了.c文件創建自。您需要在.l文件中設置斷點或使用-L選項來指示flex不要使用#line指令。

當設置斷點時,GDB需要出現在#line指令中的文件名。如果您手動將.l文件轉換爲.c文件,那麼這可能是您在命令行上使用的。如果轉換是通過make隱式完成的,那麼它只是.l文件的基名(沒有文件夾)。

+0

我想過那個..我試圖在.l文件中設置一些,並且調試器停止在yylex()調用上,但它不知道如何找到.l文件來顯示源文件或 – Derek

+0

不知道關於-L選項..這就像一個魅力!有沒有什麼辦法可以告訴gdb .l文件的位置,以便我可以繼續使用#line指令來記錄日誌的漂亮打印原因? – Derek

+0

'.yy.c'文件是否在與'.l'文件相同的文件夾中生成? – Will