9.2.5. 使用系统调用结果修改
模拟从系统调用返回的错误可帮助识别程序中缺少的错误处理。
要使程序在特定系统调用时收到通用错误,请使用 -e fault=
选项运行 strace
工具并提供系统调用:
scl enable devtoolset-11 'strace -e fault=syscall program argument...'
$ scl enable devtoolset-11 'strace -e fault=syscall program argument...'scl enable devtoolset-11 'strace -e fault=syscall program argument...'scl enable devtoolset-11 'strace -e fault=syscall program argument...'scl enable devtoolset-11 'strace -e fault=syscall program argument...'scl enable devtoolset-11 'strace -e fault=syscall program argument...'scl enable devtoolset-11 'strace -e fault=syscall program argument...'scl enable devtoolset-11 'strace -e fault=syscall program argument...'
要指定错误类型或返回值,请使用 -e inject=
选项:
scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument' scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'
$ scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'scl enable devtoolset-11 'strace -e inject=syscall:error=error-type program argument'
$ scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'scl enable devtoolset-11 'strace -e inject=syscall:retval=return-value program argument'
请注意,指定错误类型和返回值是互斥的。
例 9.5. 使用系统调用结果修改
考虑名为 lsblk
的可执行文件。在这个文件中运行 strace
工具,使 mmap()
系统调用返回错误: