summaryrefslogtreecommitdiff
path: root/hurd/debugging/translator/capturing_stdout_and_stderr.mdwn
blob: b7cfc3c9f6dd2a65eefda8b1297aeac333b38a3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[[!meta copyright="Copyright © 2008, 2009, 2010 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled
[[GNU Free Documentation License|/fdl]]."]]"""]]

Sometimes it may already be helpful to capture a translator's `stdout` and
`stderr`, for example in this situation where [[translator/pfinet]] was
silently dying all the time, without any console output:

    $ sudo settrans -fgap ↩
      /servers/socket/2 ↩
      /bin/sh -c '/hurd/pfinet -i eth0 -a [...] > /tmp/stdout 2> /tmp/stderr'
    $ [...]
    $ cat /tmp/stdout
    NET4: Linux TCP/IP 1.0 for NET4.0
    IP Protocols: ICMP, UDP, TCP
    TCP: Hash tables configured (ehash 65536 bhash 65536)
    $ cat /tmp/stderr
    pfinet: ../../hurd.work/pfinet/ethernet.c:196: ethernet_xmit: Unexpected error: (os/device) invalid IO size.

(Trying to run [[GDB]] in this case was of no help -- due to a bug in GDB
(supposedly) it wouldn't catch the fault.)

Be made aware that both `stdout` and `stderr` will be block bufferend and no
longer line buffered when doing such a redirection, so you'll have to arrange
for appropriate `fflush`es on these, or force them to be line buffered again
using the appropriate glibc magic (`setvbuf`).  Otherwise you'll see text in
the output files only if either glibc herself decides to flush (after some KiB
of text) the after translator exits.

There is also a [[related open issue|open_issues/translator_stdout_stderr]].