<div dir="ltr"><div dir="ltr"><div>Just got a question about this. If it's meant to break those assumptions or</div><div>whatever expectations from someone, why not make the output more explicit</div><div>(e.g. add some annotations like:</div><div>        getgroups(32, array[100, 0]) = 2 </div><div>        sigprocmask(SIG_BLOCK, bitset[CHLD TTOU], []) = 0 </div><div>or any abbreviations of array and bitset instead of just adding spaces</div><div>around those elements, which makes them literarily distinguishable but still</div><div>a little confusing when someone glances at it. Of course this idea makes the </div><div>output more complicated and I'm not sure about its feasibility. Anyway, I'm</div><div>willing to discuss and help :).</div><div><br></div><div>Zhibin Li</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Oct 17, 2018 at 12:13 PM Eugene Syromyatnikov <<a href="mailto:evgsyr@gmail.com">evgsyr@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello.<br>
<br>
There are some questions about strace users' preference regarding<br>
formatting of bit fields, arrays, and pointers in strace's output. As<br>
of now, square brackets are used for designating all these things,<br>
with the only difference in a separator used for delimiting items in<br>
arrays and bit masks (a combination of comma and space is used for<br>
delimiting array items, and a space is used for bit fields). Examples<br>
from strace(1):<br>
           getgroups(32, [100, 0]) = 2<br>
           sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0<br>
<br>
A special case of an array is a pointer reference, which is also<br>
printed using square brackets:<br>
           futex([0x2] /* 0x7fbf7bd730c8 */, FUTEX_WAKE_PRIVATE, 2147483647) = 0<br>
<br>
The issue is that an array that contains only a single item may be<br>
confused with a bit mask that has only one bit set. As a solution to<br>
this, it is proposed to add spaces around elements in bit mask output:<br>
           getgroups(32, [100]) = 2<br>
           getgroups(32, []) = 2<br>
           sigprocmask(SIG_BLOCK, [ CHLD ], [  ]) = 0<br>
           sigprocmask(SIG_UNBLOCK, ~[  ], NULL) = 0<br>
<br>
The main problem associated with that change is that It breaks<br>
established output formatting rules that are likely being relied upon<br>
by some. Other significant problem is within the fact that such kind<br>
of output formatting is somewhat unorthodox (having syntactically<br>
significant whitespace).<br>
<br>
The other slightly relevant issue is that, as of now, there is no<br>
distinction in the formatting of structures that are referenced by<br>
pointer compared to embedded structures (e.g., no difference of fields<br>
A and B in the output of the following structure: struct { struct<br>
timespec *A; struct timespec B; };); it is proposed to print square<br>
brackets around structures that are referenced by pointer, and the<br>
issue is the same: it will change a lot of exiting output and likely<br>
will break a lot of assumptions.<br>
<br>
The solution I can see is to add an option that enables more regular<br>
output, but that would be yet another option some have to pass for<br>
each interactive strace session, and will create the need to have<br>
significant amount of code for handling both legacy and regular output<br>
formatting, which doesn't really help maintainability of the project.<br>
<br>
So, maybe someone has any ideas in this regard (a completely different<br>
syntax for bit sets that considers the fact that there are stripped<br>
prefixes for bit constants, for example)?<br>
<br>
-- <br>
Eugene Syromyatnikov<br>
mailto:<a href="mailto:evgsyr@gmail.com" target="_blank">evgsyr@gmail.com</a><br>
xmpp:esyr@jabber.{ru|org}<br>
-- <br>
Strace-devel mailing list<br>
<a href="mailto:Strace-devel@lists.strace.io" target="_blank">Strace-devel@lists.strace.io</a><br>
<a href="https://lists.strace.io/mailman/listinfo/strace-devel" rel="noreferrer" target="_blank">https://lists.strace.io/mailman/listinfo/strace-devel</a><br>
</blockquote></div></div>