即使在大括号中也能在 strace 中显示完整的参数

Show complete arguments in strace even in curly brackets

我知道 -s 选项应该显示更长的参数,但它并不总是有效(可能是因为那些大括号表示数组或嵌套参数?)。

即使在 运行 strace -s1000 my_command 之后,这个参数仍然被截断:

ioctl(3, SNDCTL_TMR_TEMPO or TCGETA, {B9600 -opost -isig -icanon -echo ...}) = 0

如何查看完整的参数?

strace参数中有这样的选项——你应该使用-v命令行开关。 此外,由于这个强大实用程序的开源特性,您可以通过修补 strace sources:

中的 defs.h header 来完全禁用缩写
< #define abbrev(tcp)   ((tcp)->qual_flg & QUAL_ABBREV)
---
> #define abbrev(tcp)   0

我已经从本地 gentoo /usr/portage/distfiles/ 软件源存储中以这种方式 strace-4.9 进行了修补。它不需要从 sourceforge 下载最新的 strace 源。

要详细描述 Vladimir Kunschikov 所说的话 - 运行 以下命令:

  1. git clone git://git.code.sf.net/p/strace/code strace-code
  2. cd strace-code
  3. 按照 Vladimir Kunschikov 的描述修改 defs.h 文件的部分。
  4. ./bootstrap
  5. ./configure
  6. make
  7. make install

strace 的修改版本应该已经安装在 /usr/local/bin/strace 中。现在,运行 strace-s 选项使用较大的值。示例:

strace -s 65536 command_to_run_goes_here

来源:

  1. Vladimir Kunschikov 的回答。
  2. https://github.com/strace/strace/issues/2

根据 the manual and the source-v 选项应该可以帮助您处理大型结构。

这里不是长度问题

./term.c:                       tprintf(" %sopost %sisig %sicanon %secho ...}",

如果需要,您可以在此处添加更多标志。标志在 /usr/include/asm-generic/termbits.h

中定义