我有寫在TypeScript中的依賴項。依賴包括源映射和NPM包中的原始源。如果我在代碼中設置斷點,然後進入依賴關係,它將正確地進入TypeScript而不是編譯的JavaScript。但是,如果我在TypeScript代碼中設置斷點,然後啓動我的應用程序,VSCode會說如何獲取VSCode爲NPM依賴關係加載源映射?
由於未找到生成的代碼(源圖問題?)而忽略了斷點。
如果我設置了一個斷點之後步進到依賴關係中一切正常。
我相信這裏的問題是源地圖是單向的,所以當我在TypeScript源文件中有一個斷點時,它不知道它在JavaScript中的位置(這是通過實際設置斷點節點調試器)。一旦JavaScript文件打開,VSCode就能匹配兩個現在和現在的斷點工作。
所以問題是,我怎樣才能讓這個我的TS斷點從啓動工作,而無需先一步進入文件?依賴是很多文件,並且每次運行都必須重置我的斷點,這是有問題的,尤其是因爲如果我花費太長時間(超過幾秒),我正在調試的特定問題將運行到套接字連接超時。
我想要的是一種告訴TypeScript的方法,「在調試器啓動時解析這些JavaScript文件並同步源映射,以便斷點匹配正確」。
我知道一般功能是可用的,因爲我可以通過TypeScript文件中的斷點成功調試依賴項本身(我是依賴項的維護者)。當它作爲NPM模塊加載時,似乎有些信息會丟失。
我覺得這個混亂是由包的分發s我們的代碼。 在典型的情況下,它不應該。 如果你仔細想想,當你嘗試調試代碼時,這意味着你正在運行代碼。 通過運行代碼,這意味着您正在運行JavaScript代碼而不是TypeScript源代碼(因此您需要源代碼映射)。 通過在源代碼中放置斷點可能無法正常工作,因爲它沒有執行。 執行時(在調試模式下),您正在查看的「源代碼」與源地圖連接,因此它可以工作。 – unional
我確實認爲這樣做不方便,也許VSCode可以做些什麼。 對於這個問題,您是否有更好的IDE經驗? – unional
調試轉換後的源代碼,特別是如果原始源使用承諾並轉發到ES5時,可能是絕對的地獄。當你用C/C++編寫你的代碼時,它和調試彙編指令一樣有效。在大多數語言中,分佈式二進制文件是編譯好的,但調試工具經常(總是?)支持將源代碼與二進制文件一起分發以使其調試是理智的。這對於C#和Java以及一些C/C++工作是正確的。我懷疑Go和Rust也是一樣的? –