zoukankan      html  css  js  c++  java
  • 记一次错误排查,主要问题是跨平台文件中换行符(CRLF, LF)和垃圾字符( Caret Notation)

    笔者测试SPEC14的workload的时候,需要自定义workload,又需要在Windows和Linux平台上都要测试,所以就遇到了这么个问题:测试工具报错,但是报出来的错误信息又跟错误对不上。


    工具没问题,不跨平台就没问题,所以首先怀疑跨平台的文件是不是有什么不一样。

    使用notepad++打开导出的workload文件,发现Linux平台下和Windows平台下的长的不一样。

    image

    image


    使用notepad++的状态栏的功能,可以快速转换这两种换行符。

    image

    或者遵循下面的步骤:

    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:
    • Set "Replace With" to:
    • Click "Replace All"

    然而,问题并没有解决,还是报错。

    再Linux下使用cat查看两个文件,发现有些不一样:

    image

    两个文件的大小也不同。Notepad++里看上去一模一样的两个文件,居然大小差了整整一倍多。

    image


    使用cat的-v开关,可以查看打印不出来的字符,于是发现了玄机。

    -v, --show-nonprinting
                  use ^ and M- notation, except for LFD and TAB


    可以看到,windows平台下导出的spec14的workload file里,包含了很多的垃圾字符。

    image


    查了一下,这种前面带脱字符(^)后面带个其他字符的字符,叫做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

    https://en.wikipedia.org/wiki/Caret_notation

  • 相关阅读:
    Appium遇到的问题二(持续更新....)
    开源unittest测试报告源码BSTestRunner.py
    Unittest + python
    python快速开发Web之Django
    Python基础(五) python装饰器使用
    Appium环境搭建(一)
    linux ssh 报错failed
    CentOS6.9快速安装配置svn
    python 购物车小程序
    连续三次登陆失败锁定账户
  • 原文地址:https://www.cnblogs.com/awpatp/p/11187319.html
Copyright © 2011-2022 走看看