目前應該沒有這種除錯工具,至少我還沒見過。 若想自己實現一個也不難,只需要寫一個簡單的偵錯程式,每條指令都斷下來,根據pdb找出當前指令對應的原始碼行號並儲存起來,然後繼續執行下一條指令,等結束之後把結果打印出來。 這樣一個工具可以實現但完全不實用,起碼對於C/C++程式碼來說肯定是這樣的。 對於稍微大一點的工程而言,執行一秒鐘,可能就會打印出幾十萬個行號,檢查這些行號需要花費的時間就完全讓人無法承受。 更何況這種手段能解決的問題太侷限了,若能用這個方法解決,完全可以用其它方法更容易的解決。相比而言,更好的方法顯然是更傳統的在合適的地方加一些斷言或者log,大體定位到某一部分後,在前面下一個斷點,然後單步除錯。 還有一點就是編譯最佳化,在開啟了編譯最佳化後,這個對應並不一樣的正確的,很有可能你會看到行號詭異的亂跳,試想一下在VS中除錯O1或者O2最佳化過的程式碼的場景吧,完全讓人摸不著頭腦,若是隻看行號來除錯,怕是隻能哭了。 最類似的你所說工具的應該是測試過程中用到的覆蓋率測試工具,不過它的實現原理有些不同,若有興趣可以找一些相關資料來看。
目前應該沒有這種除錯工具,至少我還沒見過。 若想自己實現一個也不難,只需要寫一個簡單的偵錯程式,每條指令都斷下來,根據pdb找出當前指令對應的原始碼行號並儲存起來,然後繼續執行下一條指令,等結束之後把結果打印出來。 這樣一個工具可以實現但完全不實用,起碼對於C/C++程式碼來說肯定是這樣的。 對於稍微大一點的工程而言,執行一秒鐘,可能就會打印出幾十萬個行號,檢查這些行號需要花費的時間就完全讓人無法承受。 更何況這種手段能解決的問題太侷限了,若能用這個方法解決,完全可以用其它方法更容易的解決。相比而言,更好的方法顯然是更傳統的在合適的地方加一些斷言或者log,大體定位到某一部分後,在前面下一個斷點,然後單步除錯。 還有一點就是編譯最佳化,在開啟了編譯最佳化後,這個對應並不一樣的正確的,很有可能你會看到行號詭異的亂跳,試想一下在VS中除錯O1或者O2最佳化過的程式碼的場景吧,完全讓人摸不著頭腦,若是隻看行號來除錯,怕是隻能哭了。 最類似的你所說工具的應該是測試過程中用到的覆蓋率測試工具,不過它的實現原理有些不同,若有興趣可以找一些相關資料來看。