通过替换系统库追踪文件打开的小工具libotrace



  • 最近调pnetcdf调的一头包.
    本着少麻烦@jixu 的原则, 在没有权限看IO代理日志的情况下, 我们写了一套通过替换系统库来实现的关于打开文件的追踪工具.

    链接

    source /home/export/online1/swmore/release/setenv
    <你原有的链接命令> $LINK_OTRACE
    

    注意读取环境变量时要根据你的编译脚本替换$LINK_OTRACE, 例如在Makefile中是$(LINK_OTRACE)而在bash中是$LINK_OTRACE或者${LINK_OTRACE}.

    运行

    正常运行你的程序, 可以获得类似如下的输出:

    vn000202:pre_f_open: pwd=/home/export/online1/swmore/compose/otrace, path=data1.dat, unit=1, (NEW, SEQUENTIAL, FORMATTED, NULL, ASIS, UNSPECIFIED, NONE, YES)
    vn000202:pre_open: pwd=/home/export/online1/swmore/compose/otrace, path=data1.dat, flags=O_RDWR|O_CREAT|O_EXCL, mode=666
    vn000202:post_open: pwd=/home/export/online1/swmore/compose/otrace, path=data1.dat, flags=O_RDWR|O_CREAT|O_EXCL, mode=666, fd=5, result=Success
    vn000202:pre_f_open: pwd=/home/export/online1/swmore/compose/otrace, path=data1.dat, unit=1, (NEW, SEQUENTIAL, FORMATTED, NULL, ASIS, UNSPECIFIED, NONE, YES), ret=0
    

    其中pre_open, pre_openat, pre_f_open分别代表调用libc的open, openat和libf的_f_open接口之前传入的参数. 而post_*包含了参数和返回的结果.
    其中, openat中打出的pwd是openat所传入的fd对应的目录, f_open中打出的(x,x,x,x,x...)代表着fortran的open中的(status, access, form, blank, position, action, delim, pad)选项.

    备注

    • 源码位于/home/export/online1/swmore/opensource, 任意基于此代码进行的修改, 请注明此代码出处.


  • 貌似pnetcdf都一直有点问题???



  • 修好了, 可以用了...现在没有f_open了, 因为我发现f_open的请求还是会发给__open的.


登录后回复