Show complete arguments in strace even in curly br

2019-03-15 03:34发布

I know the -s option should display longer arguments, but it doesn't work always (probably because of those curly brackets meaning array or nested arguments?).

Even after running strace -s1000 my_command this argument is still truncated:

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

How can I see the complete arguments?

标签: linux strace
4条回答
Lonely孤独者°
2楼-- · 2019-03-15 03:44

To verbosely describe what Vladimir Kunschikov said - run the following commands:

  1. git clone git://git.code.sf.net/p/strace/code strace-code
  2. cd strace-code
  3. Modify the part of defs.h file as described by Vladimir Kunschikov.
  4. ./bootstrap
  5. ./configure
  6. make
  7. make install

The modified version of strace should have been installed in /usr/local/bin/strace. Now, run the strace using a large value for the -s option. Example:

strace -s 65536 command_to_run_goes_here

Sources:

  1. Vladimir Kunschikov's answer.
  2. https://github.com/strace/strace/issues/2
查看更多
在下西门庆
3楼-- · 2019-03-15 03:50

Here it is not length problem.

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

You can add here more flags if you want. The flags are defined in /usr/include/asm-generic/termbits.h

查看更多
Explosion°爆炸
4楼-- · 2019-03-15 04:02

According to the manual and the source, the -v option should help you with large structures.

查看更多
男人必须洒脱
5楼-- · 2019-03-15 04:06

There is such option in the strace parameters - you should use -v command line switch. Furthermore, due to the opensource nature of this great utility, you can disable abbreviation totally by patching the defs.h header in the strace sources:

< #define abbrev(tcp)   ((tcp)->qual_flg & QUAL_ABBREV)
---
> #define abbrev(tcp)   0

I've patched that way strace-4.9 from my local gentoo /usr/portage/distfiles/ software sources storage. It doesn't require to download latest strace sources from sourceforge.

查看更多
登录 后发表回答