strace 输出:禁用缩写完全改变输出

strace 输出:禁用缩写完全改变输出

正常的strace调用给了我这个输出:

ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0

我想查看其他终端标志并-v尝试-e abbrev=none

打印环境、stat、termios 等调用的未缩写版本。

但这两个选项并不(只是)显示更多内容,而是显示以下内容:

ioctl(0, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0

答案1

看着代码,这些是唯一可用的行为。仅对于缩写输出,才会显式打印这四个标志的波特率和状态。否则,将打印十六进制值以向您提供详细信息。你必须寻找 termios 标志别处

if (abbrev(tcp)) {
    tprints("{");
    printxval(baud_options, tios.c_cflag & CBAUD, "B???");
    tprintf(" %sopost %sisig %sicanon %secho ...}",
        (tios.c_oflag & OPOST) ? "" : "-",
        (tios.c_lflag & ISIG) ? "" : "-",
        (tios.c_lflag & ICANON) ? "" : "-",
        (tios.c_lflag & ECHO) ? "" : "-");
    return;
}
tprintf("{c_iflags=%#lx, c_oflags=%#lx, ",
    (long) tios.c_iflag, (long) tios.c_oflag);
tprintf("c_cflags=%#lx, c_lflags=%#lx, ",
    (long) tios.c_cflag, (long) tios.c_lflag);
tprintf("c_line=%u, ", tios.c_line);

相关内容