source: trunk/samba/docs/htmldocs/Samba3-Developers-Guide/tracing.html @ 17

Last change on this file since 17 was 1, checked in by Paul Smedley, 14 years ago

Initial code import

File size: 6.1 KB
Line 
1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Tracing samba system calls</title><link rel="stylesheet" href="samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.68.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="prev" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="next" href="devprinting.html" title="Chapter 15. Samba Printing Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Tracing samba system calls</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. Debugging and tracing</th><td width="20%" align="right"> <a accesskey="n" href="devprinting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="tracing"></a>Chapter 14. Tracing samba system calls</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span></div></div></div></div></div><p>
2This file describes how to do a system call trace on Samba to work out
3what its doing wrong. This is not for the faint of heart, but if you
4are reading this then you are probably desperate.
5</p><p>
6Actually its not as bad as the the above makes it sound, just don't
7expect the output to be very pretty :-)
8</p><p>
9Ok, down to business. One of the big advantages of unix systems is
10that they nearly all come with a system trace utility that allows you
11to monitor all system calls that a program is making. This is
12extremely using for debugging and also helps when trying to work out
13why something is slower than you expect. You can use system tracing
14without any special compilation options.
15</p><p>
16The system trace utility is called different things on different
17systems. On Linux systems its called strace. Under SunOS 4 its called
18trace. Under SVR4 style systems (including solaris) its called
19truss. Under many BSD systems its called ktrace.
20</p><p>
21The first thing you should do is read the man page for your native
22system call tracer. In the discussion below I'll assume its called
23strace as strace is the only portable system tracer (its available for
24free for many unix types) and its also got some of the nicest
25features.
26</p><p>
27Next, try using strace on some simple commands. For example, <span><strong class="command">strace
28ls</strong></span> or <span><strong class="command">strace echo hello</strong></span>.
29</p><p> 
30You'll notice that it produces a LOT of output. It is showing you the
31arguments to every system call that the program makes and the
32result. Very little happens in a program without a system call so you
33get lots of output. You'll also find that it produces a lot of
34"preamble" stuff showing the loading of shared libraries etc. Ignore
35this (unless its going wrong!)
36</p><p>
37For example, the only line that really matters in the <span><strong class="command">strace echo
38hello</strong></span> output is:
39</p><pre class="programlisting">
40write(1, "hello\n", 6)                  = 6
41</pre><p>all the rest is just setting up to run the program.</p><p>
42Ok, now you're familiar with strace. To use it on Samba you need to
43strace the running smbd daemon. The way I tend ot use it is to first
44login from my Windows PC to the Samba server, then use smbstatus to
45find which process ID that client is attached to, then as root I do
46<span><strong class="command">strace -p PID</strong></span> to attach to that process. I normally redirect the
47stderr output from this command to a file for later perusal. For
48example, if I'm using a csh style shell:
49</p><p><span><strong class="command">strace -f -p 3872 &gt;&amp; strace.out</strong></span></p><p>or with a sh style shell:</p><p><span><strong class="command">strace -f -p 3872 &gt; strace.out 2&gt;&amp;1</strong></span></p><p>
50Note the "-f" option. This is only available on some systems, and
51allows you to trace not just the current process, but any children it
52forks. This is great for finding printing problems caused by the
53"print command" being wrong.
54</p><p>
55Once you are attached you then can do whatever it is on the client
56that is causing problems and you will capture all the system calls
57that smbd makes.
58</p><p>
59So how do you interpret the results? Generally I search through the
60output for strings that I know will appear when the problem
61happens. For example, if I am having touble with permissions on a file
62I would search for that files name in the strace output and look at
63the surrounding lines. Another trick is to match up file descriptor
64numbers and "follow" what happens to an open file until it is closed.
65</p><p>
66Beyond this you will have to use your initiative. To give you an idea
67of what you are looking for here is a piece of strace output that
68shows that <code class="filename">/dev/null</code> is not world writeable, which
69causes printing to fail with Samba:
70</p><pre class="programlisting">
71[pid 28268] open("/dev/null", O_RDWR)   = -1 EACCES (Permission denied)
72[pid 28268] open("/dev/null", O_WRONLY) = -1 EACCES (Permission denied)
73</pre><p>
74The process is trying to first open <code class="filename">/dev/null</code> read-write
75then read-only. Both fail. This means <code class="filename">/dev/null</code> has
76incorrect permissions.
77</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pt04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="devprinting.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. Debugging and tracing </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. Samba Printing Internals</td></tr></table></div></body></html>
Note: See TracBrowser for help on using the repository browser.