0

我在調查VSng的Clang代碼庫,並且.sln文件由CMake生成。 我已經將解決​​方案配置爲Debug/x64,我可以看到生成的.pdb伴隨這些庫的文件,但我無法打破鏈接到clang可執行文件的lib代碼。如何在VS2015中調試Clang靜態鏈接庫

例如,我在解析期間控制流必須經過的clangParse模塊中設置了一些斷點,但在打印AST之後,調試器沒有停在clangParse模塊的斷點上,而是僅在在叮噹聲模塊本身設置的斷點。

對於其他一些手動創建的帶有可執行文件和靜態庫的解決方案,我可以調試這些庫。不知道爲什麼這不適用於CMake生成的Clang/LLVM解決方案。

我需要在這裏做什麼特殊設置?

+0

您能否分享重現此問題的詳細步驟?如果您只是使用「無需調試而啓動(Ctrl + F5)」運行該項目,該項目是否可以成功編譯?如果斷點沒有命中並且項目編譯正常,你會在輸出窗口中看到有用的消息嗎?在調試模式下,將鼠標放在未命中的斷點上,或者點擊調試菜單 - > Windows->模塊窗口,你是否收到任何消息? –

+0

@ Eddie-MSFT是的,我可以成功地編譯和運行它,並且我可以在clang項目中斷點,但不能在其他靜態鏈接庫(例如clangParse)中斷開。我很確定控制流程應該經歷我設定的中斷點。 – Jamboree

+0

您可以通過此鏈接啓用「異常設置」窗口:https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx。在將調用庫的代碼行(A)中添加一個斷點,然後在命中(A)後使用「Step Into(F11)」對其進行調試,以便您可以一步一步地調試應用程序,收集消息。請在「工具 - >選項 - >調試」下選中「顯示反彙編源代碼不可用」選項。如果仍然沒有消息,你能分享一個簡單的樣本嗎? –

回答

1

問題是Clang驅動程序內部在Windows上產生了自己的子進程,並且所有有趣的事情都是在子進程中完成的,所以libs中的斷點永遠不會因爲它們在另一個進程中而被擊中。

要解決此問題,請安裝Microsoft Child Process Debugging Power Tool並啓用子進程調試,這會將子進程附加到調試器。