记一次错误排查,主要问题是跨平台文件中换行符(CRLF, LF)和垃圾字符( Caret Notation)
笔者测试SPEC14的workload的时候,需要自定义workload,又需要在Windows和Linux平台上都要测试,所以就遇到了这么个问题:测试工具报错,但是报出来的错误信息又跟错误对不上。
工具没问题,不跨平台就没问题,所以首先怀疑跨平台的文件是不是有什么不一样。
使用notepad++打开导出的workload文件,发现Linux平台下和Windows平台下的长的不一样。
使用notepad++的状态栏的功能,可以快速转换这两种换行符。
或者遵循下面的步骤:
For a single file you can use Notepad++ replace utility:
- Go to Search -> Replace (or ctrl-h)
- In the dialog box select "Extended" search mode
- Set "Find What" to:
\r\n
- Set "Replace With" to:
\n
- Click "Replace All"
然而,问题并没有解决,还是报错。
再Linux下使用cat查看两个文件,发现有些不一样:
两个文件的大小也不同。Notepad++里看上去一模一样的两个文件,居然大小差了整整一倍多。
使用cat的-v开关,可以查看打印不出来的字符,于是发现了玄机。
-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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律