天天看點

linux c語言 d啟用調試模式,c-使用Visual Studio的Linux支援調試庫代碼

我正在使用Visual Studio 2017的內建在Windows Linux子系統中本地建構和調試CMake Linux應用程式.

運作應用程式時,Visual Studio使用與本地主機的ssh連接配接來運作cmake -DCMAKE_BUILD_TYPE =“ Debug” ..并生成,然後使用gdbserver調試應用程式.這對于我的應用程式自己的代碼(包括斷點和逐行調試)非常有效.

該應用程式連結到庫檔案libhypro.so.17.09,它也是CMake項目的一部分.這個庫也是在調試模式下本地建構的(存儲在我的Windows檔案系統中,通過/ mnt / c /挂載在Linux内建構,就像主應用程式一樣). CMake确實自動發現了這種依賴性.

我在調試對該庫的調用時遇到問題.例如,如果我在調用庫代碼之前中斷并選擇“進入”,這就是我要結束的地方:

linux c語言 d啟用調試模式,c-使用Visual Studio的Linux支援調試庫代碼

注意

>調用堆棧消失了,顯示了[未知/及時編譯的代碼],

>我處于未處理的異常中(我希望最終會發生,但肯定不會在進入步驟後立即發生),

>“子產品”視窗訓示沒有符号可用.

另外,我确實在庫的代碼中設定了一個斷點,Visual Studio(正确)斷言“該斷點目前不會被擊中”.同樣,調試輸出會列印“已加載’/mnt/c/Users/felix/git/hypro/build/libhypro.so.17.09”.找不到或打開符号檔案.

我相對确定libhypro.so.17.09确實包含調試符号,因為nm -gC libhypro.so列印了大量輸出.

我的情況似乎類似于this question,但是我沒有手動指定庫的路徑,而是由CMake發現的.

為什麼gdb以及Visual Studio未能調試庫的代碼?