Q
跨版本行匹配
1
A
回答
0
爲什麼你需要這樣做?如果您使用體面的源代碼版本控制,您應該可以訪問舊版本的代碼,您可以簡單地提供一個鏈接,以便人們可以在原始位置查看錯誤。事實上,我在這個系統中看到的主要問題是,該錯誤可能已經被修復,但是您的自動線路跟蹤代碼將指向一條線,並說有一個錯誤。看起來這個系統會很痛苦,並且在實踐中不會提供很多幫助。
0
我的建議是:不要試圖追蹤行號,因爲您觀察到的行數可能隨軟件更改而快速失去同步,您應該用唯一標識符修飾每個斷言(或其他感興趣的行)。
假設你使用C,在斷言的情況下,這可能就像將assert(x == 42);
改爲assert(("check_x", x == 42));
一樣簡單 - 這在功能上是相同的,因爲C中的逗號操作符的語義以及一個字符串文字將始終評估爲true。
當然這意味着您需要確定先驗您希望跟蹤的項目。但是鑑於沒有一種可靠的方法來匹配不同版本的源代碼行數(我的意思是說,對於您可以提出的任何機制,我相信我可以提出這種機制做錯事情的情況),我認爲這是是你能做的最好的。
另一個想法:如果你使用C++,你可以使用RAII非常優雅地跟蹤動態範圍。基本上,你有一個Track
類,它的構造函數接受一個描述範圍的字符串,並將其添加到當前活動作用域的全局堆棧中。析構函數彈出堆棧頂部的元素。最終的組成部分是一個靜態函數Track::getState()
,它簡單地返回所有當前活動作用域的列表 - 這可以從異常處理程序或其他錯誤處理機制中調用。
相關問題
- 1. Dart版本控制 - 無匹配版本
- 2. httpd phpinfo.php中的PHP版本與命令行版本不匹配
- 3. 大會版本不匹配
- 4. MPICH2 smpd版本不匹配
- 5. TensorFlow protobuf版本不匹配
- 6. Libtool版本不匹配
- 7. ValidationException類版本不匹配
- 8. 的版本不匹配
- 9. 的Protobuf版本不匹配
- 10. 豬版本不匹配(Hadoop)
- 11. aclocal的版本不匹配
- 12. Nuget.Core.dll版本號不匹配
- 13. 模塊版本不匹配
- 14. pg_dump的版本不匹配
- 15. System.IdentityModel.Tokens.Jwt版本不匹配
- 16. 跨MSVCRT版本分配C++對象
- 17. 確定跨多列的行匹配
- 18. Ruby Gemfile與Ruby版本不匹配,但匹配ruby -v輸出
- 19. openOptionsMenu()跨Android版本
- 20. Java版本和路徑不匹配
- 21. 瀏覽器版本匹配 - 在PHP 5.1.6
- 22. libapache2-svn,與Subversion 1.6.1匹配的版本
- 23. 斯卡拉火花版本不匹配
- 24. 匹配jQuery和jQuery-UI版本
- 25. 組件版本不匹配錯誤
- 26. 版本與Kendo-Angular不匹配*
- 27. FSharp.Data.SqlProvider和FSharp.Core版本不匹配VS2017
- 28. PTVSD Visual Studio版本不匹配
- 29. 爲什麼我的NuGet版本匹配
- 30. Linux節點模塊版本不匹配
我在想的並不是那麼多的按行數來跟蹤特定的錯誤(棘手的錯誤有多少次*有一行代碼),但更多的是跟蹤統計信息關於事情發生的地方檢測。例如;什麼主張最常被擊中?斷言行程時,堆棧上最常見的代碼行是什麼?那種事情。能夠將這種東西從一個版本組合到另一個版本會很好。 – BCS 2010-04-09 17:18:58