筆者測試SPEC14的workload的時候,須要自定義workload,又須要在Windows和Linux平臺上都要測試,因此就遇到了這麼個問題:測試工具報錯,可是報出來的錯誤信息又跟錯誤對不上。windows
工具沒問題,不跨平臺就沒問題,因此首先懷疑跨平臺的文件是否是有什麼不同。工具
使用notepad++打開導出的workload文件,發現Linux平臺下和Windows平臺下的長的不同。測試
使用notepad++的狀態欄的功能,能夠快速轉換這兩種換行符。spa
或者遵循下面的步驟:code
For a single file you can use Notepad++ replace utility:blog
\r\n
\n
然而,問題並無解決,仍是報錯。ip
再Linux下使用cat查看兩個文件,發現有些不同:ci
兩個文件的大小也不一樣。Notepad++裏看上去如出一轍的兩個文件,竟然大小差了整整一倍多。get
使用cat的-v開關,能夠查看打印不出來的字符,因而發現了玄機。it
-v, --show-nonprinting |
能夠看到,windows平臺下導出的spec14的workload file裏,包含了不少的垃圾字符。
查了一下,這種前面帶脫字符(^)後面帶個其餘字符的字符,叫作caret notation。是ASCII中的對控制字符的標識法。
在workload file中出現這麼多脫字符符號,是徹底沒有意義的,這個應該就個是跨平臺的bug。
因爲其在Windows平臺下的工具下(notepad, notepad++)徹底不可見,而Linux平臺下的工具「cat -v」才能看到它們,排查起來真是很是的討厭。
日後跨平臺的東西,這種垃圾字符的問題你們要當心。
參考資料
============
How to replace crlf with lf in a single file
https://stackoverflow.com/questions/27810758/how-to-replace-crlf-with-lf-in-a-single-file
Caret notation