最近调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
, 任意基于此代码进行的修改, 请注明此代码出处.