summaryrefslogtreecommitdiff
path: root/lib/runtime_tools
diff options
context:
space:
mode:
Diffstat (limited to 'lib/runtime_tools')
-rw-r--r--lib/runtime_tools/Makefile2
-rw-r--r--lib/runtime_tools/doc/src/LTTng.xml61
-rw-r--r--lib/runtime_tools/doc/src/Makefile77
-rw-r--r--lib/runtime_tools/doc/src/dbg.xml158
-rw-r--r--lib/runtime_tools/doc/src/dyntrace.xml34
-rw-r--r--lib/runtime_tools/doc/src/erts_alloc_config.xml42
-rw-r--r--lib/runtime_tools/doc/src/msacc.xml44
-rw-r--r--lib/runtime_tools/doc/src/notes.xml78
-rw-r--r--lib/runtime_tools/doc/src/scheduler.xml42
-rw-r--r--lib/runtime_tools/doc/src/system_information.xml12
-rw-r--r--lib/runtime_tools/examples/function-calls.d46
-rw-r--r--lib/runtime_tools/examples/function-calls.systemtap46
-rw-r--r--lib/runtime_tools/src/appmon_info.erl6
-rw-r--r--lib/runtime_tools/src/erts_alloc_config.erl25
-rw-r--r--lib/runtime_tools/src/observer_backend.erl23
-rw-r--r--lib/runtime_tools/src/runtime_tools.app.src4
-rw-r--r--lib/runtime_tools/test/erts_alloc_config_SUITE.erl16
-rw-r--r--lib/runtime_tools/vsn.mk2
18 files changed, 420 insertions, 298 deletions
diff --git a/lib/runtime_tools/Makefile b/lib/runtime_tools/Makefile
index eec1ff379b..4b0f1633ab 100644
--- a/lib/runtime_tools/Makefile
+++ b/lib/runtime_tools/Makefile
@@ -36,4 +36,6 @@ SPECIAL_TARGETS =
#
include $(ERL_TOP)/make/otp_subdir.mk
+DIA_PLT_APPS=mnesia
+include $(ERL_TOP)/make/app_targets.mk
diff --git a/lib/runtime_tools/doc/src/LTTng.xml b/lib/runtime_tools/doc/src/LTTng.xml
index 89cbc805d8..c12de0c6e9 100644
--- a/lib/runtime_tools/doc/src/LTTng.xml
+++ b/lib/runtime_tools/doc/src/LTTng.xml
@@ -77,7 +77,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">process_spawn: { cpu_id = 3 }, { pid = "&lt;0.131.0&gt;", parent = "&lt;0.130.0&gt;", entry = "erlang:apply/2" }</code>
@@ -90,7 +90,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">process_link: { cpu_id = 3 }, { from = "&lt;0.130.0&gt;", to = "&lt;0.131.0&gt;", type = "link" }</code>
@@ -103,7 +103,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">process_exit: { cpu_id = 3 }, { pid = "&lt;0.130.0&gt;", reason = "normal" }</code>
@@ -125,7 +125,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">process_scheduled: { cpu_id = 0 }, { pid = "&lt;0.136.0&gt;", entry = "erlang:apply/2", type = "in" }</code>
@@ -139,7 +139,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">port_open: { cpu_id = 5 }, { pid = "&lt;0.131.0&gt;", driver = "'/bin/sh -s unix:cmd'", port = "#Port&lt;0.1887&gt;" }</code>
@@ -151,7 +151,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">port_exit: { cpu_id = 5 }, { port = "#Port&lt;0.1887&gt;", reason = "normal" }</code>
@@ -164,7 +164,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">port_link: { cpu_id = 5 }, { from = "#Port&lt;0.1887&gt;", to = "&lt;0.131.0&gt;", type = "unlink" }</code>
@@ -172,7 +172,7 @@ $ make </code>
<p><em>port_scheduled</em></p>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<list type="bulleted">
<item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
@@ -184,7 +184,7 @@ $ make </code>
<code type="none">port_scheduled: { cpu_id = 5 }, { pid = "#Port&lt;0.1905&gt;", entry = "close", type = "out" }</code>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p><em>function_call</em></p>
<list type="bulleted">
@@ -194,7 +194,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">function_call: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }</code>
@@ -207,7 +207,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">function_return: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }</code>
@@ -220,7 +220,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">function_exception: { cpu_id = 5 }, { pid = "&lt;0.144.0&gt;", entry = "t:call_exc/1", class = "error" }</code>
@@ -233,7 +233,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">message_send: { cpu_id = 3 }, { from = "#Port&lt;0.1938&gt;", to = "&lt;0.160.0&gt;", message = "{#Port&lt;0.1938&gt;,eof}" }</code>
@@ -245,7 +245,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">message_receive: { cpu_id = 7 }, { to = "&lt;0.167.0&gt;", message = "{&lt;0.165.0&gt;,ok}" }</code>
@@ -259,7 +259,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">gc_minor_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 0, heap = 610, old_heap = 0 }</code>
@@ -273,7 +273,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">gc_minor_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 120, heap = 1598, old_heap = 1598 }</code>
@@ -287,7 +287,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">gc_major_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 8, heap = 2586, old_heap = 1598 }</code>
@@ -301,7 +301,7 @@ $ make </code>
</list>
<p>
Available through
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
</p>
<p>Example:</p>
<code type="none">gc_major_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 240, heap = 4185, old_heap = 0 }</code>
@@ -313,14 +313,6 @@ $ make </code>
<p>All tracepoints are in the domain of <c>org_erlang_otp</c></p>
<p>All Erlang types are the string equivalent in LTTng.</p>
- <p><em>scheduler_poll</em></p>
- <list type="bulleted">
- <item><c>scheduler : integer</c> :: Scheduler ID. Ex. <c>1</c></item>
- <item><c>runnable : integer</c> :: Runnable. Ex. <c>1</c></item>
- </list>
- <p>Example:</p>
- <code type="none">scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }</code>
-
<p><em>driver_init</em></p>
<list type="bulleted">
<item><c>driver : string</c> :: Driver name. Ex. <c>"tcp_inet"</c></item>
@@ -450,23 +442,6 @@ $ make </code>
<p>Example:</p>
<code type="none">driver_control: { cpu_id = 3 }, { pid = "&lt;0.32767.8191&gt;", port = "#Port&lt;0.0&gt;", driver = "forker", command = 83, bytes = 32 }</code>
- <p><em>aio_pool_get</em></p>
- <list type="bulleted">
- <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
- <item><c>length : integer</c> :: Async queue length. Ex. <c>0</c></item>
- </list>
- <p>Example:</p>
- <code type="none">aio_pool_get: { cpu_id = 4 }, { port = "#Port&lt;0.3614&gt;", length = 0 }</code>
-
- <p><em>aio_pool_put</em></p>
- <list type="bulleted">
- <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
- <item><c>length : integer</c> :: Async queue length. Ex. <c>-1</c></item>
- </list>
- <p>Async queue length is not defined for <c>put</c> operations.</p>
- <p>Example:</p>
- <code type="none">aio_pool_put: { cpu_id = 3 }, { port = "#Port&lt;0.3614&gt;", length = -1 }</code>
-
<p><em>carrier_create</em></p>
<list type="bulleted">
<item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
diff --git a/lib/runtime_tools/doc/src/Makefile b/lib/runtime_tools/doc/src/Makefile
index 2399ed51e0..53c3cc9d26 100644
--- a/lib/runtime_tools/doc/src/Makefile
+++ b/lib/runtime_tools/doc/src/Makefile
@@ -33,11 +33,6 @@ VSN=$(RUNTIME_TOOLS_VSN)
APPLICATION=runtime_tools
# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
@@ -64,83 +59,17 @@ XML_FILES = \
XML_GEN_FILES = $(GENERATED_XML_FILES:%=$(XMLDIR)/%)
-GIF_FILES =
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml)
+IMAGE_FILES =
TOP_SPECS_FILE = specs.xml
# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-SPECS_ESRC = ../../src
-
-SPECS_FLAGS = -I../../include -I../../../kernel/src
-
-# ----------------------------------------------------
# Targets
# ----------------------------------------------------
$(XMLDIR)/%.xml: $(ERL_TOP)/HOWTO/%.md $(ERL_TOP)/make/emd2exml
$(ERL_TOP)/make/emd2exml $< $@
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES) $(MAN6_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -rf $(XMLDIR)
- rm -f $(MAN3DIR)/*
- rm -f $(MAN6DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
- $(INSTALL_DATA) $(MAN6_FILES) "$(RELEASE_PATH)/man/man6"
-
-release_spec:
+
+include $(ERL_TOP)/make/doc.mk
diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml
index e15fc3efe6..168e89b7f0 100644
--- a/lib/runtime_tools/doc/src/dbg.xml
+++ b/lib/runtime_tools/doc/src/dbg.xml
@@ -36,8 +36,8 @@
<modulesummary>The Text Based Trace Facility</modulesummary>
<description>
<p>This module implements a text based interface to the
- <seealso marker="erts:erlang#trace-3"><c>trace/3</c></seealso> and the
- <seealso marker="erts:erlang#trace_pattern-2"><c>trace_pattern/2</c></seealso> BIFs. It makes it
+ <seemfa marker="erts:erlang#trace/3"><c>trace/3</c></seemfa> and the
+ <seemfa marker="erts:erlang#trace_pattern/2"><c>trace_pattern/2</c></seemfa> BIFs. It makes it
possible to trace functions, processes, ports and messages.
</p>
<p>
@@ -58,12 +58,12 @@
</pre>
<p>
For more examples of how to use <c>dbg</c> from the Erlang
- shell, see the <seealso marker="#simple_example">simple example</seealso> section.
+ shell, see the <seeerl marker="#simple_example">simple example</seeerl> section.
</p>
<p>The utilities are also suitable to use in system testing on
large systems, where other tools have too much impact on the
system performance. Some primitive support for sequential tracing
- is also included, see the <seealso marker="#advanced">advanced topics</seealso> section.
+ is also included, see the <seeerl marker="#advanced">advanced topics</seeerl> section.
</p>
</description>
<funcs>
@@ -76,10 +76,10 @@
</type>
<desc>
<p>Pseudo function that by means of a <c>parse_transform</c>
- translates the <em>literal</em><c>fun()</c> typed as parameter in
+ translates the <em>literal</em> <c>fun()</c> typed as parameter in
the function call to a match specification as described in
the <c>match_spec</c> manual of ERTS users guide.
- (with literal I mean that the <c>fun()</c> needs to
+ (With literal I mean that the <c>fun()</c> needs to
textually be written as the parameter of the function, it
cannot be held in a variable which in turn is passed to the
function). </p>
@@ -184,8 +184,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<tag><c>pid()</c> or <c>port()</c></tag>
<item>The corresponding process or port is traced. The process or port may
be a remote process or port (on another Erlang node). The node must
- be in the list of traced nodes (see <seealso marker="#n-1"><c>n/1</c></seealso>
- and <seealso marker="#tracer-3"><c>tracer/3</c></seealso>).</item>
+ be in the list of traced nodes (see <seemfa marker="#n/1"><c>n/1</c></seemfa>
+ and <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa>).</item>
<tag><c>all</c></tag>
<item>All processes and ports in the system as well as all processes and ports
created hereafter are to be traced.</item>
@@ -208,23 +208,23 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<tag><c>atom()</c></tag>
<item>The process or port with the corresponding registered name is traced. The process or
port may be a remote process (on another Erlang node). The node must be
- added with the <seealso marker="#n-1"><c>n/1</c></seealso> or
- <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</item>
+ added with the <seemfa marker="#n/1"><c>n/1</c></seemfa> or
+ <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> function.</item>
<tag><c>integer()</c></tag>
<item>The process <c><![CDATA[<0.Item.0>]]></c> is traced.</item>
<tag><c>{X, Y, Z}</c></tag>
<item>The process <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
<tag><c>string()</c></tag>
<item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
- as returned from <seealso marker="erts:erlang#pid_to_list-1"><c>pid_to_list/1</c></seealso>,
+ as returned from <seemfa marker="erts:erlang#pid_to_list/1"><c>pid_to_list/1</c></seemfa>,
the process <c><![CDATA[<X.Y.Z>]]></c> is traced.
</item>
</taglist>
<p>When enabling an <c>Item</c> that represents a group of processes,
the <c>Item</c> is enabled on all nodes added with the
- <seealso marker="#n-1"><c>n/1</c></seealso> or
- <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</p>
+ <seemfa marker="#n/1"><c>n/1</c></seemfa> or
+ <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> function.</p>
<p><c>Flags</c> can be a single atom,
or a list of flags. The available flags are:
@@ -276,7 +276,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<item>
<p>This is the same as <c>sol</c>, but only for
the first call to
- <seealso marker="erts:erlang#link-1"><c>link/1</c></seealso> by the traced process.</p>
+ <seemfa marker="erts:erlang#link/1"><c>link/1</c></seemfa> by the traced process.</p>
</item>
<tag><c>all</c></tag>
<item>
@@ -289,13 +289,13 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
</taglist>
<p>The list can also include any of the flags allowed in
- <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso></p>
+ <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa></p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of
specifications of how many processes and ports that matched (in the
case of a pure pid() exactly 1). The specification of
matched processes is <c>{matched, Node, N}</c>. If the
- remote processor call,<c>rpc</c>, to a remote node fails,
+ remote processor call, <c>rpc</c>, to a remote node fails,
the <c>rpc</c> error message is delivered as a fourth
argument and the number of matched processes are 0. Note
that the result {ok, List} may contain a list where
@@ -369,11 +369,11 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
please turn to the
<em>User's guide</em> part of the online
documentation for the runtime system (<em>erts</em>). The
- chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ chapter <seeguide marker="erts:match_spec"><em>Match Specifications in Erlang</em></seeguide>
explains the general match specification "language".
The most common generic match specifications used can be
found as <c>Built-inAlias</c>', see
- <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.
+ <seemfa marker="#ltp/0"><c>ltp/0</c></seemfa> below for details.
</p>
<p>The Module, Function and/or Arity parts of the tuple may
be specified as the atom <c>'_'</c> which is a "wild-card"
@@ -381,21 +381,21 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
Module is specified as <c>'_'</c>, the Function and Arity
parts have to be specified as '_' too. The same holds for the
Functions relation to the Arity.</p>
- <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
- <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
+ <p>All nodes added with <seemfa marker="#n/1"><c>n/1</c></seemfa> or
+ <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> will
be affected by this call, and if Module is not <c>'_'</c>
the module will be loaded on all nodes.</p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of specifications of how
many functions that matched, in the same way as the processes and ports
- are presented in the return value of <seealso marker="#p-2"><c>p/2</c></seealso>. </p>
+ are presented in the return value of <seemfa marker="#p/2"><c>p/2</c></seemfa>. </p>
<p>There may be a tuple <c>{saved, N}</c> in the return value,
if the MatchSpec is other
than []. The integer <c>N</c> may then be used in
subsequent calls to this function and will stand as an
"alias" for the given expression. There are also a couple of
built-in aliases for common expressions, see
- <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.</p>
+ <seemfa marker="#ltp/0"><c>ltp/0</c></seemfa> below for details.</p>
<p>If an error is returned, it can be due to errors in
compilation of the match specification. Such errors are
presented as a list of tuples <c>{error, string()}</c> where
@@ -434,7 +434,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name since="">tpl({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Set pattern for traced local (as well as global) function calls</fsummary>
<desc>
- <p>This function works as <seealso marker="#tp-2"><c>tp/2</c></seealso>, but enables
+ <p>This function works as <seemfa marker="#tp/2"><c>tp/2</c></seemfa>, but enables
tracing for local calls (and local functions) as well as for
global calls (and functions).</p>
</desc>
@@ -461,7 +461,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>For a description of the <c>match_spec()</c> syntax,
please turn to the <em>User's guide</em> part of the online
documentation for the runtime system (<em>erts</em>). The
- chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ chapter <seeguide marker="erts:match_spec"><em>Match Specifications in Erlang</em></seeguide>
explains the general match specification "language".</p>
<p>For <c>send</c>, the matching is done on the list <c>[Receiver, Msg]</c>.
<c>Receiver</c> is the process or port identity of the receiver and
@@ -474,11 +474,11 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
be the case for remote senders). <c>Msg</c> is the
message term. The pid of the receiving process can be
accessed with the guard function <c>self/0</c>.</p>
- <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
- <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
+ <p>All nodes added with <seemfa marker="#n/1"><c>n/1</c></seemfa> or
+ <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> will
be affected by this call.</p>
<p>The return value is the same as for
- <seealso marker="#tp-2"><c>tp/2</c></seealso>. The number of matched
+ <seemfa marker="#tp/2"><c>tp/2</c></seemfa>. The number of matched
events are never larger than 1 as <c>tpe/2</c> does not
accept any form of wildcards for argument <c>Event</c>.</p>
</desc>
@@ -525,10 +525,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>This function disables call tracing on the specified
functions. The semantics of the parameter is the same
as for the corresponding function specification in
- <seealso marker="#tp-2"><c>tp/2</c></seealso> or <seealso marker="#tpl-2"><c>tpl/2</c></seealso>. Both local and global call trace
+ <seemfa marker="#tp/2"><c>tp/2</c></seemfa> or <seemfa marker="#tpl/2"><c>tpl/2</c></seemfa>. Both local and global call trace
is disabled. </p>
<p>The return value reflects how many functions that matched,
- and is constructed as described in <seealso marker="#tp-2"><c>tp/2</c></seealso>. No tuple
+ and is constructed as described in <seemfa marker="#tp/2"><c>tp/2</c></seemfa>. No tuple
<c>{saved, N}</c> is however ever returned (for obvious reasons).</p>
</desc>
</func>
@@ -564,9 +564,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name since="">ctpl({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
- tracing set up with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>
- (not with <seealso marker="#tp-2"><c>tp/2</c></seealso>).</p>
+ <p>This function works as <seemfa marker="#ctp/1"><c>ctp/1</c></seemfa>, but only disables
+ tracing set up with <seemfa marker="#tpl/2"><c>tpl/2</c></seemfa>
+ (not with <seemfa marker="#tp/2"><c>tp/2</c></seemfa>).</p>
</desc>
</func>
<func>
@@ -601,9 +601,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name since="">ctpg({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
- tracing set up with <seealso marker="#tp-2"><c>tp/2</c></seealso>
- (not with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>).</p>
+ <p>This function works as <seemfa marker="#ctp/1"><c>ctp/1</c></seemfa>, but only disables
+ tracing set up with <seemfa marker="#tp/2"><c>tp/2</c></seemfa>
+ (not with <seemfa marker="#tpl/2"><c>tpl/2</c></seemfa>).</p>
</desc>
</func>
<func>
@@ -619,7 +619,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
trace event (<c>send</c> or <c>'receive'</c>). It will revert back
to the default behavior of tracing all triggered events.</p>
<p>The return value follow the same style as for
- <seealso marker="#ctp-1"><c>ctp/1</c></seealso>.</p>
+ <seemfa marker="#ctp/1"><c>ctp/1</c></seemfa>.</p>
</desc>
</func>
<func>
@@ -628,14 +628,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>Use this function to recall all match specifications previously
used in the session (i. e. previously saved during calls
- to <seealso marker="#tp-2"><c>tp/2</c></seealso>, and built-in match specifications.
+ to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>, and built-in match specifications.
This is very useful, as a complicated
match_spec can be quite awkward to write. Note that the
- match specifications are lost if <seealso marker="#stop-0"><c>stop/0</c></seealso> is called.</p>
+ match specifications are lost if <seemfa marker="#stop/0"><c>stop/0</c></seemfa> is called.</p>
<p>Match specifications used can be saved in a file (if a
read-write file system is present) for use in later
- debugging sessions, see <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
- and <seealso marker="#rtp-1"><c>rtp/1</c></seealso></p>
+ debugging sessions, see <seemfa marker="#wtp/1"><c>wtp/1</c></seemfa>
+ and <seemfa marker="#rtp/1"><c>rtp/1</c></seemfa></p>
<p>There are three built-in trace patterns:
<c>exception_trace</c>, <c>caller_trace</c>
and <c>caller_exception_trace</c> (or <c>x</c>, <c>c</c> and
@@ -658,10 +658,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<fsummary>Delete all saved match specifications.</fsummary>
<desc>
<p>Use this function to "forget" all match specifications
- saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.
+ saved during calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>.
This is useful when one wants to restore other match
- specifications from a file with <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. Use
- <seealso marker="#dtp-1"><c>dtp/1</c></seealso> to delete specific saved match specifications.</p>
+ specifications from a file with <seemfa marker="#rtp/1"><c>rtp/1</c></seemfa>. Use
+ <seemfa marker="#dtp/1"><c>dtp/1</c></seemfa> to delete specific saved match specifications.</p>
</desc>
</func>
<func>
@@ -672,7 +672,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Use this function to "forget" a specific match specification
- saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.</p>
+ saved during calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>.</p>
</desc>
</func>
<func>
@@ -684,12 +684,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function will save all match specifications saved
- during the session (during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>)
+ during the session (during calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>)
and built-in match specifications in a text
file with the name designated by <c>Name</c>. The format
of the file is textual, why it can be edited with an
ordinary text editor, and then restored with
- <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. </p>
+ <seemfa marker="#rtp/1"><c>rtp/1</c></seemfa>. </p>
<p>Each match spec in the file ends with a full stop
(<c>.</c>) and new (syntactically correct) match
specifications can be added to the file manually.</p>
@@ -707,7 +707,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function reads match specifications from a file
- (possibly) generated by the <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ (possibly) generated by the <seemfa marker="#wtp/1"><c>wtp/1</c></seemfa>
function. It checks
the syntax of all match specifications and verifies that
they are correct. The error handling principle is "all or
@@ -716,7 +716,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
saved match specifications for the running system. </p>
<p>The match specifications in the file are <em>merged</em>
with the current match specifications, so that no duplicates
- are generated. Use <seealso marker="#ltp-0"><c>ltp/0</c></seealso>
+ are generated. Use <seemfa marker="#ltp/0"><c>ltp/0</c></seemfa>
to see what numbers were
assigned to the specifications from the file.</p>
<p>The function will return an error, either due to I/O
@@ -736,9 +736,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>The <c>dbg</c> server keeps a list of nodes where tracing
- should be performed. Whenever a <seealso marker="#tp-2"><c>tp/2</c></seealso> call or a
- <seealso marker="#p-2"><c>p/2</c></seealso> call is made, it is executed for all nodes in this
- list including the local node (except for <seealso marker="#p-2"><c>p/2</c></seealso> with a
+ should be performed. Whenever a <seemfa marker="#tp/2"><c>tp/2</c></seemfa> call or a
+ <seemfa marker="#p/2"><c>p/2</c></seemfa> call is made, it is executed for all nodes in this
+ list including the local node (except for <seemfa marker="#p/2"><c>p/2</c></seemfa> with a
specific <c>pid()</c> or <c>port()</c> as first argument, in which case the
command is executed only on the node where the designated
process or port resides).
@@ -750,17 +750,17 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
distribution). If no tracer process is running on the local
node, the error reason <c>no_local_tracer</c> is returned. The
tracer process on the local node must be started with the
- <seealso marker="#tracer-2"><c>tracer/0/2</c></seealso> function.
+ <seemfa marker="#tracer/2"><c>tracer/0/2</c></seemfa> function.
</p>
<p>If <c>Nodename</c> is the local node, the error reason
<c>cant_add_local_node</c> is returned.
</p>
- <p>If a trace port (see <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>) is
+ <p>If a trace port (see <seemfa marker="#trace_port/2"><c>trace_port/2</c></seemfa>) is
running on the local node, remote nodes cannot be traced with
a tracer process. The error reason
<c>cant_trace_remote_pid_to_local_port</c> is returned. A
trace port can however be started on the remote node with the
- <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.
+ <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> function.
</p>
<p>The function will also return an error if the node
<c>Nodename</c> is not reachable.</p>
@@ -774,8 +774,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Clears a node from the list of traced nodes. Subsequent
- calls to <seealso marker="#tp-2"><c>tp/2</c></seealso> and
- <seealso marker="#p-2"><c>p/2</c></seealso> will not consider that
+ calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa> and
+ <seemfa marker="#p/2"><c>p/2</c></seemfa> will not consider that
node, but tracing already activated on the node will continue
to be in effect.</p>
<p>Returns <c>ok</c>, cannot fail.</p>
@@ -794,14 +794,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a server on the local node that will
be the recipient of all trace messages. All subsequent calls
- to <seealso marker="#p-2"><c>p/2</c></seealso> will result in messages sent to the newly
+ to <seemfa marker="#p/2"><c>p/2</c></seemfa> will result in messages sent to the newly
started trace server.</p>
<p>A trace server started in this way will simply display the
trace messages in a formatted way in the Erlang shell
- (i. e. use io:format). See <seealso marker="#tracer-2"><c>tracer/2</c></seealso>
+ (i. e. use io:format). See <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>
for a description of how the trace message handler can be customized.
</p>
- <p>To start a similar tracer on a remote node, use <seealso marker="#n-1"><c>n/1</c></seealso>.</p>
+ <p>To start a similar tracer on a remote node, use <seemfa marker="#n/1"><c>n/1</c></seemfa>.</p>
</desc>
</func>
<func>
@@ -825,9 +825,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
by a receiving process (<c>process</c>), by a tracer port
(<c>port</c>) or by a tracer module
(<c>module</c>). For a description about tracer ports see
- <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>
+ <seemfa marker="#trace_port/2"><c>trace_port/2</c></seemfa>
and for a tracer modules see
- <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>.
+ <seeerl marker="erts:erl_tracer"><c>erl_tracer</c></seeerl>.
</p>
<p>If <c>Type</c> is <c>process</c>, a message handler function can
be specified (<c>HandlerSpec</c>). The handler function, which
@@ -843,10 +843,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>If <c>Type</c> is <c>port</c>, then the second parameter should
be a <em>fun</em> which takes no arguments and returns a
newly opened trace port when called. Such a <em>fun</em> is
- preferably generated by calling <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>.
+ preferably generated by calling <seemfa marker="#trace_port/2"><c>trace_port/2</c></seemfa>.
</p>
<p>if <c>Type</c> is <c>module</c>, then the second parameter should
- be either a tuple describing the <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>
+ be either a tuple describing the <seeerl marker="erts:erl_tracer"><c>erl_tracer</c></seeerl>
module to be used for tracing and the state to be used for
that tracer module or a fun returning the same tuple.</p>
<p>If an error is returned, it can either be due to a tracer
@@ -854,7 +854,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
due to the <c>HandlerFun</c> throwing an exception.
</p>
<p>To start a similar tracer on a remote node, use
- <seealso marker="#tracer-3"><c>tracer/3</c></seealso>.
+ <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa>.
</p>
</desc>
</func>
@@ -865,19 +865,19 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<v>Nodename = atom()</v>
</type>
<desc>
- <p>This function is equivalent to <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but acts on
+ <p>This function is equivalent to <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>, but acts on
the given node. A tracer is started on the node
(<c>Nodename</c>) and the node is added to the list of traced nodes.
</p>
<note>
- <p>This function is not equivalent to <seealso marker="#n-1"><c>n/1</c></seealso>. While
- <seealso marker="#n-1"><c>n/1</c></seealso> starts a process tracer which redirects all trace
+ <p>This function is not equivalent to <seemfa marker="#n/1"><c>n/1</c></seemfa>. While
+ <seemfa marker="#n/1"><c>n/1</c></seemfa> starts a process tracer which redirects all trace
information to a process tracer on the local node (i.e. the
- trace control node), <seealso marker="#tracer-3"><c>tracer/3</c></seealso> starts a tracer of any
+ trace control node), <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> starts a tracer of any
type which is independent of the tracer on the trace control
node.</p>
</note>
- <p>For details, see <seealso marker="#tracer-2"><c>tracer/2</c></seealso>.</p>
+ <p>For details, see <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>.</p>
</desc>
</func>
<func>
@@ -909,9 +909,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<c>file</c> and the <c>ip</c> trace drivers. The file driver
sends all trace messages into one or several binary files,
from where they later can be fetched and processed with the
- <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> function. The ip driver opens a TCP/IP
+ <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa> function. The ip driver opens a TCP/IP
port where it listens for connections. When a client
- (preferably started by calling <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> on
+ (preferably started by calling <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa> on
another Erlang node) connects, all trace messages are sent
over the IP network for further processing by the remote
client. </p>
@@ -950,7 +950,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
as fast as they are produced by the runtime system, a special
message is sent, which indicates how many messages that are
dropped. That message will arrive at the handler function
- specified in <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso>
+ specified in <seemfa marker="#trace_client/3"><c>trace_client/3</c></seemfa>
as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
dropped. In case of heavy tracing, drop's are likely to occur,
and they surely occur if no client is reading the trace
@@ -1029,7 +1029,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>This function starts a trace client that reads the output
created by a trace port driver and handles it in mostly the
same way as a tracer process created by the
- <seealso marker="#tracer-0"><c>tracer/0</c></seealso> function.</p>
+ <seemfa marker="#tracer/0"><c>tracer/0</c></seemfa> function.</p>
<p>If <c>Type</c> is <c>file</c>, the client reads all trace
messages stored in the file named <c>Filename</c> or
specified by <c>WrapFilesSpec</c> (must be the same as used
@@ -1040,7 +1040,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>If <c>Type</c> is <c>follow_file</c>, the client behaves as
in the <c>file</c> case, but keeps trying to read (and
process) more data
- from the file until stopped by <seealso marker="#stop_trace_client-1"><c>stop_trace_client/1</c></seealso>.
+ from the file until stopped by <seemfa marker="#stop_trace_client/1"><c>stop_trace_client/1</c></seemfa>.
<c>WrapFilesSpec</c> is not allowed as second argument
for this <c>Type</c>.</p>
<p>If <c>Type</c> is <c>ip</c>, the client connects to the
@@ -1096,10 +1096,10 @@ hello</pre>
<v>InitialData = term()</v>
</type>
<desc>
- <p>This function works exactly as <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>,
+ <p>This function works exactly as <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa>,
but allows you to write your own handler function. The handler
function works mostly as the one described in
- <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but will also have to be prepared to handle
+ <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>, but will also have to be prepared to handle
trace messages of the form <c>{drop, N}</c>, where <c>N</c> is
the number of dropped messages. This pseudo trace message will
only occur if the ip trace driver is used.</p>
@@ -1118,8 +1118,8 @@ hello</pre>
<desc>
<p>This function shuts down a previously started trace
client. The <c>Pid</c> argument is the process id returned
- from the <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>
- or <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso> call.</p>
+ from the <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa>
+ or <seemfa marker="#trace_client/3"><c>trace_client/3</c></seemfa> call.</p>
</desc>
</func>
<func>
@@ -1272,7 +1272,7 @@ SeqTrace [0]: (&lt;0.30.0>) &lt;0.25.0> ! {dbg,{ok,&lt;0.31.0>}} [Serial: {4,5}]
of causing a deadlock. This will happen if a group leader process generates a trace
message and the tracer process, by calling the trace handler function, sends an IO
request to the same group leader. The problem can only occur if the trace handler
- prints to tty using an <c>io</c> function such as <seealso marker="stdlib:io#format-2"><c>format/2</c></seealso>.
+ prints to tty using an <c>io</c> function such as <seemfa marker="stdlib:io#format/2"><c>format/2</c></seemfa>.
Note that when
<c>dbg:p(all,call)</c> is called, IO processes are also traced.
Here's an example:</p>
diff --git a/lib/runtime_tools/doc/src/dyntrace.xml b/lib/runtime_tools/doc/src/dyntrace.xml
index 4935dfcd71..85e9ed8899 100644
--- a/lib/runtime_tools/doc/src/dyntrace.xml
+++ b/lib/runtime_tools/doc/src/dyntrace.xml
@@ -43,7 +43,7 @@
</list>
<p>Both building with dynamic trace probes and using them is experimental and unsupported by Erlang/OTP. It is included as an option for the developer to trace and debug performance issues in their systems.</p>
<p>The original implementation is mostly done by Scott Lystiger Fritchie as an Open Source Contribution and it should be viewed as such even though the source for dynamic tracing as well as this module is included in the main distribution. However, the ability to use dynamic tracing of the virtual machine is a very valuable contribution which OTP has every intention to maintain as a tool for the developer.</p>
- <p>How to write <c>d</c> programs or <c>systemtap</c> scripts can be learned from books and from a lot of pages on the Internet. This manual page does not include any documentation about using the dynamic trace tools of respective platform. The <c>examples</c> directory of the <c>runtime_tools</c> application however contains comprehensive examples of both <c>d</c> and <c>systemtap</c> programs that will help you get started. Another source of information is the <seealso marker="DTRACE">dtrace</seealso> and <seealso marker="SYSTEMTAP">systemtap</seealso> chapters in the Runtime Tools Users' Guide.</p>
+ <p>How to write <c>d</c> programs or <c>systemtap</c> scripts can be learned from books and from a lot of pages on the Internet. This manual page does not include any documentation about using the dynamic trace tools of respective platform. The <c>examples</c> directory of the <c>runtime_tools</c> application however contains comprehensive examples of both <c>d</c> and <c>systemtap</c> programs that will help you get started. Another source of information is the <seeguide marker="DTRACE">dtrace</seeguide> and <seeguide marker="SYSTEMTAP">systemtap</seeguide> chapters in the Runtime Tools Users' Guide.</p>
</description>
<funcs>
<func>
@@ -51,8 +51,8 @@
<fsummary>Check if dynamic tracing is available</fsummary>
<desc>
<p>This function uses the NIF library to determine if dynamic
- tracing is available. Usually calling <seealso
- marker="erts:erlang#system_info/1">erlang:system_info/1</seealso>
+ tracing is available. Usually calling <seemfa
+ marker="erts:erlang#system_info/1">erlang:system_info/1</seemfa>
is a better indicator of the availability of dynamic
tracing.</p>
<p>The function will throw an exception if the <c>dyntrace</c> NIF library could not be loaded by the on_load function of this module.</p>
@@ -83,21 +83,21 @@
<name since="OTP R15B01">p(integer() | string(), integer() | string(), integer() | string()) -> true | false | error | badarg</name>
<fsummary>Trigger the user trace probe.</fsummary>
<desc>
- <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p>
+ <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p>
</desc>
</func>
<func>
<name since="OTP R15B01">p(integer() | string(), integer() | string(), integer() | string(), integer() | string()) -> true | false | error | badarg</name>
<fsummary>Trigger the user trace probe.</fsummary>
<desc>
- <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p>
+ <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p>
</desc>
</func>
<func>
<name since="OTP R15B01">p(integer(), integer() | string(), integer() | string(), integer() | string(), string()) -> true | false | error | badarg</name>
<fsummary>Trigger the user trace probe.</fsummary>
<desc>
- <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p>
+ <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p>
<p>There can be no more than four parameters of any type (integer() or string()), so the first parameter has to be an integer() and the last a string().</p>
</desc>
</func>
@@ -105,7 +105,7 @@
<name since="OTP R15B01">p(integer(), integer(), integer() | string(), integer() | string(), string(), string()) -> true | false | error | badarg</name>
<fsummary>Trigger the user trace probe.</fsummary>
<desc>
- <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p>
+ <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p>
<p>There can be no more than four parameters of any type (integer() or string()), so the first two parameters has to be integer()'s and the last two string()'s.</p>
</desc>
</func>
@@ -113,7 +113,7 @@
<name since="OTP R15B01">p(integer(), integer(), integer(), integer() | string(), string(), string(), string()) -> true | false | error | badarg</name>
<fsummary>Trigger the user trace probe.</fsummary>
<desc>
- <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p>
+ <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p>
<p>There can be no more than four parameters of any type (integer() or string()), so the first three parameters has to be integer()'s and the last three string()'s.</p>
</desc>
</func>
@@ -140,11 +140,11 @@
<p>This function returns the user tag set in the current
process or, if no user tag is present, the last user tag sent
to the process together with a message (in the same way as
- <seealso marker="kernel:seq_trace">sequential trace
- tokens</seealso> are spread to other processes together with
+ <seeerl marker="kernel:seq_trace">sequential trace
+ tokens</seeerl> are spread to other processes together with
messages. For an explanation of how user tags can be spread
- together with messages, see <seealso
- marker="#spread_tag/1">spread_tag/1</seealso>. If no tag is
+ together with messages, see <seemfa
+ marker="#spread_tag/1">spread_tag/1</seemfa>. If no tag is
found or dynamic tracing is not available, it returns
<c>undefined</c></p>
</desc>
@@ -166,13 +166,13 @@
<name since="OTP R15B01">spread_tag(boolean()) -> TagData</name>
<fsummary>Start or stop spreading dynamic trace user tags with the next message.</fsummary>
<type>
- <v>TagData = opaque data that can be used as parameter to <seealso marker="#restore_tag/1">restore_tag/1</seealso></v>
+ <v>TagData = opaque data that can be used as parameter to <seemfa marker="#restore_tag/1">restore_tag/1</seemfa></v>
</type>
<desc>
<p>This function controls if user tags are to be spread to other processes with the next message. Spreading of user tags work like spreading of sequential trace tokens, so that a received user tag will be active in the process until the next message arrives (if that message does not also contain the user tag.</p>
<p>This functionality is used when a client process communicates with a file i/o-server to spread the user tag to the I/O-server and then down to the efile_drv driver. By using <c>spread_tag/1</c> and <c>restore_tag/1</c>, one can enable or disable spreading of user tags to other processes and then restore the previous state of the user tag. The TagData returned from this call contains all previous information so the state (including any previously spread user tags) will be completely restored by a later call to <c>restore_tag/1</c>.</p>
- <p>The <seealso marker="kernel:file">file</seealso> module already spread's tags, so there is noo need to manually call these function to get user tags spread to the efile driver through that module.</p>
- <p>The most use of this function would be if one for example uses the <seealso marker="stdlib:io">io</seealso> module to communicate with an I/O-server for a regular file, like in the following example:</p>
+ <p>The <seeerl marker="kernel:file">file</seeerl> module already spread's tags, so there is noo need to manually call these function to get user tags spread to the efile driver through that module.</p>
+ <p>The most use of this function would be if one for example uses the <seeerl marker="stdlib:io">io</seeerl> module to communicate with an I/O-server for a regular file, like in the following example:</p>
<pre>
f() ->
{ok, F} = file:open("test.tst",[write]),
@@ -188,10 +188,10 @@ f() ->
<name since="OTP R15B01">restore_tag(TagData) -> true</name>
<fsummary>Restore to a previous state of user tag spreading.</fsummary>
<type>
- <v>TagData = opaque data returned by <seealso marker="#spread_tag/1">spread_tag/1</seealso></v>
+ <v>TagData = opaque data returned by <seemfa marker="#spread_tag/1">spread_tag/1</seemfa></v>
</type>
<desc>
- <p>Restores the previous state of user tags and their spreading as it was before a call to <seealso marker="#spread_tag/1">spread_tag/1</seealso>. Note that the restoring is not limited to the same process, one can utilize this to turn off spreding in one process and restore it in a newly created, the one that actually is going to send messages:</p>
+ <p>Restores the previous state of user tags and their spreading as it was before a call to <seemfa marker="#spread_tag/1">spread_tag/1</seemfa>. Note that the restoring is not limited to the same process, one can utilize this to turn off spreding in one process and restore it in a newly created, the one that actually is going to send messages:</p>
<pre>
f() ->
TagData=dyntrace:spread_tag(false),
diff --git a/lib/runtime_tools/doc/src/erts_alloc_config.xml b/lib/runtime_tools/doc/src/erts_alloc_config.xml
index 5bcce1b5e3..f26721b9e9 100644
--- a/lib/runtime_tools/doc/src/erts_alloc_config.xml
+++ b/lib/runtime_tools/doc/src/erts_alloc_config.xml
@@ -37,10 +37,10 @@
tool and might be subject to backward incompatible
changes.</p>
</note>
- <p><seealso marker="erts:erts_alloc">erts_alloc(3)</seealso> is an
+ <p><seecref marker="erts:erts_alloc">erts_alloc(3)</seecref> is an
Erlang Run-Time System internal memory allocator library.
<c>erts_alloc_config</c> is intended to be used to aid creation
- of an <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>
+ of an <seecref marker="erts:erts_alloc">erts_alloc(3)</seecref>
configuration that is suitable for a limited number of runtime
scenarios. The configuration that <c>erts_alloc_config</c>
produce is intended as a suggestion, and may need to be
@@ -65,25 +65,25 @@
<p>A configuration is created in the following way:</p>
<list type="bulleted">
<item>
- <p>Pass the <seealso marker="erts:erts_alloc#Mea">+Mea config</seealso>
+ <p>Pass the <seecref marker="erts:erts_alloc#Mea">+Mea config</seecref>
command-line flag to the Erlang runtime system you are going
to use for creation of the allocator configuration. It will
disable features that prevent <c>erts_alloc_config</c> from
doing its job. Note, you should <em>not</em> use this flag
when using the created configuration. Also note that it is
important that you use the same
- <seealso marker="erts:erl#+S">amount of schedulers</seealso>
+ <seecom marker="erts:erl#+S">amount of schedulers</seecom>
when creating the configuration as you are going the use on
the system using the configuration.</p>
</item>
<item>
<p>Run your applications with different scenarios (the more
the better) and save information about each scenario by calling
- <seealso marker="#save_scenario/0">save_scenario/0</seealso>.
+ <seemfa marker="#save_scenario/0">save_scenario/0</seemfa>.
It may be hard to know when the applications are at an (for
<c>erts_alloc_config</c>) important runtime scenario. A good
approach may therefore be to call
- <seealso marker="#save_scenario/0">save_scenario/0</seealso>
+ <seemfa marker="#save_scenario/0">save_scenario/0</seemfa>
repeatedly, e.g. once every tenth second. Note that it is
important that your applications reach the runtime scenarios
that are important for <c>erts_alloc_config</c> when you are
@@ -92,13 +92,13 @@
</item>
<item>
<p>When you have covered all scenarios, call
- <seealso marker="#make_config/1">make_config/1</seealso>
+ <seemfa marker="#make_config/1">make_config/1</seemfa>
in order to create a configuration. The configuration is
written to a file that you have chosen. This configuration
file can later be read by an Erlang runtime-system at
startup. Pass the command line argument
- <seealso marker="erts:erl#args_file">-args_file FileName</seealso>
- to the <seealso marker="erts:erl">erl(1)</seealso> command.</p>
+ <seecom marker="erts:erl#args_file">-args_file FileName</seecom>
+ to the <seecom marker="erts:erl">erl(1)</seecom> command.</p>
</item>
<item>
<p>The configuration produced by <c>erts_alloc_config</c> may
@@ -106,10 +106,10 @@
file produced by <c>erts_alloc_config</c>; instead, put your
modifications in another file and load this file after the
file produced by <c>erts_alloc_config</c>. That is, put the
- <seealso marker="erts:erl#args_file">-args_file FileName</seealso>
+ <seecom marker="erts:erl#args_file">-args_file FileName</seecom>
argument that reads your modification file later on the
command-line than the
- <seealso marker="erts:erl#args_file">-args_file FileName</seealso>
+ <seecom marker="erts:erl#args_file">-args_file FileName</seecom>
argument that reads the configuration file produced by
<c>erts_alloc_config</c>. If a memory allocation parameter
appear multiple times, the last version of will be used, i.e.,
@@ -144,13 +144,13 @@
<desc>
<p><c>save_scenario/0</c> saves information about the current
runtime scenario. This information will later be used when
- <seealso marker="#make_config/0">make_config/0</seealso>,
- or <seealso marker="#make_config/1">make_config/1</seealso>
+ <seemfa marker="#make_config/0">make_config/0</seemfa>,
+ or <seemfa marker="#make_config/1">make_config/1</seemfa>
is called.</p>
<p>The first time <c>save_scenario/0</c> is called a server
will be started. This server will save runtime scenarios. All
saved scenarios can be removed by calling
- <seealso marker="#make_config/0">stop/0</seealso>.</p>
+ <seemfa marker="#make_config/0">stop/0</seemfa>.</p>
</desc>
</func>
<func>
@@ -161,7 +161,7 @@
</type>
<desc>
<p>This is the same as calling
- <seealso marker="#make_config/1">make_config(group_leader())</seealso>.</p>
+ <seemfa marker="#make_config/1">make_config(group_leader())</seemfa>.</p>
</desc>
</func>
<func>
@@ -173,7 +173,7 @@
</type>
<desc>
<p><c>make_config/1</c> uses the information previously saved by
- <seealso marker="#save_scenario/0">save_scenario/0</seealso>
+ <seemfa marker="#save_scenario/0">save_scenario/0</seemfa>
in order to produce an <c>erts_alloc</c> configuration. At
least one scenario have had to be saved. All scenarios
previously saved will be used when creating the
@@ -183,9 +183,9 @@
filename. A file named <c>FileNameOrIODev</c> is created and
the configuration will be written to that file. If
<c>FileNameOrIODev</c> is an
- <seealso marker="stdlib:io">io_device()</seealso> (see the
+ <seeerl marker="stdlib:io">io_device()</seeerl> (see the
documentation of the module
- <seealso marker="stdlib:io">io</seealso>), the configuration
+ <seeerl marker="stdlib:io">io</seeerl>), the configuration
will be written to the io device.</p>
</desc>
</func>
@@ -203,9 +203,9 @@
<section>
<title>See Also</title>
- <p><seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>,
- <seealso marker="erts:erl">erl(1)</seealso>,
- <seealso marker="stdlib:io">io(3)</seealso></p>
+ <p><seecref marker="erts:erts_alloc">erts_alloc(3)</seecref>,
+ <seecom marker="erts:erl">erl(1)</seecom>,
+ <seeerl marker="stdlib:io">io(3)</seeerl></p>
</section>
</erlref>
diff --git a/lib/runtime_tools/doc/src/msacc.xml b/lib/runtime_tools/doc/src/msacc.xml
index ae089de8d0..0a716136fd 100644
--- a/lib/runtime_tools/doc/src/msacc.xml
+++ b/lib/runtime_tools/doc/src/msacc.xml
@@ -37,8 +37,8 @@
<p>This module implements some convenience functions for analyzing
microstate accounting data. For details about how to use the basic api and
what the different states represent see
- <seealso marker="erts:erlang#statistics_microstate_accounting"><c>
- erlang:statistics(microstate_accounting)</c></seealso>.</p>
+ <seeerl marker="erts:erlang#statistics_microstate_accounting"><c>
+ erlang:statistics(microstate_accounting)</c></seeerl>.</p>
<marker id="msacc_print_example"></marker>
<p><em>Basic Scenario</em></p>
<pre>1> <input>msacc:start(1000).</input>
@@ -64,10 +64,10 @@ Stats per type:
ok
</pre>
<p>This first command enables microstate accounting for 1000 milliseconds.
- See <seealso marker="#start-0"><c>start/0</c></seealso>,
- <seealso marker="#stop-0"><c>stop/0</c></seealso>,
- <seealso marker="#reset-0"><c>reset/0</c></seealso> and
- <seealso marker="#start-1"><c>start/1</c></seealso> for more details.
+ See <seemfa marker="#start/0"><c>start/0</c></seemfa>,
+ <seemfa marker="#stop/0"><c>stop/0</c></seemfa>,
+ <seemfa marker="#reset/0"><c>reset/0</c></seemfa> and
+ <seemfa marker="#start/1"><c>start/1</c></seemfa> for more details.
The second command prints the statistics gathered during that time.
First three general statistics are printed.</p>
<taglist>
@@ -113,7 +113,7 @@ ok
<desc><p>A map containing information about a specific thread. The
percentages in the map can be either run-time or real-time depending
on if <c>runtime</c> or <c>realtime</c> was requested from
- <seealso marker="#stats-2">stats/2</seealso>. <c>system</c> is the
+ <seemfa marker="#stats/2">stats/2</seemfa>. <c>system</c> is the
percentage of total system time for this specific thread.</p></desc>
</datatype>
<datatype>
@@ -133,14 +133,14 @@ ok
<datatype>
<name name="msacc_state"/>
<desc><p>The different states that a thread can be in. See
- <seealso marker="erts:erlang#statistics_microstate_accounting">
- erlang:statistics(microstate_accounting)</seealso> for details.
+ <seeerl marker="erts:erlang#statistics_microstate_accounting">
+ erlang:statistics(microstate_accounting)</seeerl> for details.
</p></desc>
</datatype>
<datatype>
<name name="msacc_print_options"/>
<desc><p>The different options that can be given to
- <seealso marker="#print-2"><c>print/2</c></seealso>.
+ <seemfa marker="#print/2"><c>print/2</c></seemfa>.
</p></desc>
</datatype>
</datatypes>
@@ -192,9 +192,9 @@ ok
<p>
Prints the current microstate accounting to standard out.
Same as
- <seealso marker="#print-1">
+ <seemfa marker="#print/1">
<c>msacc:print(msacc:stats(),#{}).</c>
- </seealso>
+ </seemfa>
</p>
</desc>
</func>
@@ -204,9 +204,9 @@ ok
<desc>
<p>Print the given microstate statistics values to stdout.
Same as
- <seealso marker="#print-1">
+ <seemfa marker="#print/1">
<c>msacc:print(DataOrStats,#{}).</c>
- </seealso>
+ </seemfa>
</p>
</desc>
</func>
@@ -219,7 +219,7 @@ ok
reference manual for a brief description of what the fields mean.</p>
<p>It is possible to print more specific types of statistics by
first manipulating the <c>DataOrStats</c> using
- <seealso marker="#stats-2"><c>stats/2</c></seealso>.
+ <seemfa marker="#stats/2"><c>stats/2</c></seemfa>.
For instance if you want to print the percentage of run-time for each
thread you can do:</p>
<pre><input>msacc:print(msacc:stats(runtime,msacc:stats())).</input></pre>
@@ -239,7 +239,7 @@ ok
<desc>
<p>Print the given microstate statistics values to the given file
or device. The other arguments behave the same way as for
- <seealso marker="#print-2"><c>print/2</c></seealso>.</p>
+ <seemfa marker="#print/2"><c>print/2</c></seemfa>.</p>
</desc>
</func>
<func>
@@ -248,8 +248,8 @@ ok
<desc>
<p>Returns a runtime system independent version of the microstate
statistics data presented by
- <seealso marker="erts:erlang#statistics_microstate_accounting">
- <c>erlang:statistics(microstate_accounting)</c></seealso>.
+ <seeerl marker="erts:erlang#statistics_microstate_accounting">
+ <c>erlang:statistics(microstate_accounting)</c></seeerl>.
All counters have been normalized to be in microsecond resolution.</p>
</desc>
</func>
@@ -289,16 +289,16 @@ ok
<fsummary></fsummary>
<desc>
<p>Dumps the current microstate statistics counters to a file that can
- be parsed with <seealso marker="kernel:file#consult/1">
- file:consult/1</seealso>.</p>
+ be parsed with <seemfa marker="kernel:file#consult/1">
+ file:consult/1</seemfa>.</p>
</desc>
</func>
<func>
<name name="from_file" arity="1" since="OTP 19.0"/>
<fsummary></fsummary>
<desc>
- <p>Read a file dump produced by <seealso marker="#to_file/1">
- to_file(Filename)</seealso>.</p>
+ <p>Read a file dump produced by <seemfa marker="#to_file/1">
+ to_file(Filename)</seemfa>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml
index 210d63687c..6303397f57 100644
--- a/lib/runtime_tools/doc/src/notes.xml
+++ b/lib/runtime_tools/doc/src/notes.xml
@@ -32,6 +32,62 @@
<p>This document describes the changes made to the Runtime_Tools
application.</p>
+<section><title>Runtime_Tools 1.16</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Clarify documentation of module 'scheduler'.</p>
+ <p>
+ Own Id: OTP-17208 Aux Id: GH-4502, PR-4532 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.15.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed a crash in <c>appmon_info</c> triggered by trying
+ to read port info from a port that was in the process of
+ terminating.</p>
+ <p>
+ <c>appmon_info</c> is used by <c>observer</c> to get
+ information from the observed node.</p>
+ <p>
+ Own Id: OTP-16787 Aux Id: PR-2673 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.15</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Improved the presentation of allocations and carriers
+ in the <c>instrument</c> module.</p>
+ <p>
+ Own Id: OTP-16327</p>
+ </item>
+ <item>
+ <p>
+ Minor updates due to the new spawn improvements made.</p>
+ <p>
+ Own Id: OTP-16368 Aux Id: OTP-15251 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Runtime_Tools 1.14</title>
<section><title>Improvements and New Features</title>
@@ -327,10 +383,10 @@
added to runtime_tools that can assist in gathering and
interpreting the data from Microstate accounting.</p>
<p>
- For more information see <seealso
+ For more information see <seeerl
marker="erts:erlang#statistics_microstate_accounting">erlang:statistics(microstate_accounting,
- _)</seealso> and the <seealso
- marker="runtime_tools:msacc">msacc</seealso> module in
+ _)</seeerl> and the <seeerl
+ marker="runtime_tools:msacc">msacc</seeerl> module in
runtime_tools.</p>
<p>
Own Id: OTP-12345</p>
@@ -366,9 +422,9 @@
configure option <c>--with-dynamic-trace=lttng</c>.</p>
<p>The dynamic trace module <c>dyntrace</c> is now
capable to be used as a LTTng sink for Erlang tracing.
- For a list of all tracepoints, see <seealso
+ For a list of all tracepoints, see <seeguide
marker="runtime_tools:LTTng">Runtime Tools User's
- Guide</seealso> .</p>
+ Guide</seeguide> .</p>
<p>This feature also introduces an incompatible change in
trace tags. The trace tags <c>gc_start</c> and
<c>gc_end</c> has been split into <c>gc_minor_start</c>,
@@ -547,18 +603,18 @@
</item>
<item>
<p>
- The <seealso
- marker="kernel:app"><c>app</c></seealso>-file key
- <seealso
- marker="kernel:app#runtime_dependencies"><c>runtime_dependencies</c></seealso>
+ The <seefile
+ marker="kernel:app"><c>app</c></seefile>-file key
+ <seefile
+ marker="kernel:app#runtime_dependencies"><c>runtime_dependencies</c></seefile>
has been introduced.</p>
<p>
Runtime dependencies have been added to all app-files in
OTP. Note that these may not be completely correct during
OTP 17, but this is actively being worked on.</p>
<p>
- The function <seealso
- marker="runtime_tools:system_information#sanity_check/0"><c>system_information:sanity_check/0</c></seealso>
+ The function <seemfa
+ marker="runtime_tools:system_information#sanity_check/0"><c>system_information:sanity_check/0</c></seemfa>
will verify all declared runtime dependencies in the
system when called.</p>
<p>
diff --git a/lib/runtime_tools/doc/src/scheduler.xml b/lib/runtime_tools/doc/src/scheduler.xml
index b033430183..d539ccb1c6 100644
--- a/lib/runtime_tools/doc/src/scheduler.xml
+++ b/lib/runtime_tools/doc/src/scheduler.xml
@@ -37,10 +37,10 @@
<description>
<p>This module contains utility functions for easier measurement and
calculation of scheduler utilization, otherwise obtained from calling the
- more primitive <seealso marker="erts:erlang#statistics_scheduler_wall_time">
- <c>statistics(scheduler_wall_time)</c></seealso>.</p>
- <p>The simplest usage is to call <seealso marker="#utilization-1">
- <c>scheduler:utilization(Seconds)</c></seealso>.</p>
+ more primitive <seeerl marker="erts:erlang#statistics_scheduler_wall_time">
+ <c>statistics(scheduler_wall_time)</c></seeerl>.</p>
+ <p>The simplest usage is to call <seemfa marker="#utilization/1">
+ <c>scheduler:utilization(Seconds)</c></seemfa>.</p>
</description>
<datatypes>
@@ -63,14 +63,17 @@
<taglist>
<tag><c>{normal, SchedulerId, Util, Percent}</c></tag>
<item>Scheduler utilization of a normal scheduler with number
- <c>SchedulerId</c>.</item>
+ <c>SchedulerId</c>. Schedulers that are not online will also be
+ included.
+ <seeerl marker="erts:erlang#system_info_schedulers_online">Online
+ schedulers</seeerl> have the lowest <c>SchedulerId</c>.</item>
<tag><c>{cpu, SchedulerId, Util, Percent}</c></tag>
<item>Scheduler utilization of a dirty-cpu scheduler with number
<c>SchedulerId</c>.</item>
<tag><c>{io, SchedulerId, Util, Percent}</c></tag>
<item>Scheduler utilization of a dirty-io scheduler with number
<c>SchedulerId</c>. This tuple will only exist if both samples were
- taken with <seealso marker="#sample_all-0"><c>sample_all/0</c></seealso>.</item>
+ taken with <seemfa marker="#sample_all/0"><c>sample_all/0</c></seemfa>.</item>
<tag><c>{total, Util, Percent}</c></tag>
<item>Total utilization of all normal and dirty-cpu schedulers.</item>
<tag><c>{weighted, Util, Percent}</c></tag>
@@ -117,6 +120,29 @@
<p>Calculate scheduler utilizations for the time interval from when
<c><anno>Sample</anno></c> was taken and "now". The same as calling
<c>scheduler:utilization(Sample, scheduler:sample_all())</c>.</p>
+ <note>
+ <p>
+ Scheduler utilization is measured as an average value over a time
+ interval, calculated as the difference between two samples. To get
+ good useful utilization values at least a couple of seconds should
+ have passed between the two samples. For this reason, you should not
+ do
+ </p>
+<pre>
+scheduler:utilization(scheduler:sample()). % DO NOT DO THIS!
+</pre>
+ <p>
+ The above example takes two samples in rapid succession and calculates
+ the scheduler utilization between them. The resulting values will
+ probably be more misleading than informative.
+ </p>
+ <p>
+ Instead use <seemfa marker="#utilization/1">
+ <c>scheduler:utilization(Seconds)</c></seemfa> or let some time pass
+ between <c>Sample=scheduler:sample()</c> and
+ <c>scheduler:utilization(Sample)</c>.
+ </p>
+ </note>
</desc>
</func>
@@ -126,8 +152,8 @@
<desc>
<p>Calculates scheduler utilizations for the time interval between
the two samples obtained from calling
- <seealso marker="#sample-0"><c>sample/0</c></seealso> or
- <seealso marker="#sample_all-0"><c>sample_all/0</c></seealso>.</p>
+ <seemfa marker="#sample/0"><c>sample/0</c></seemfa> or
+ <seemfa marker="#sample_all/0"><c>sample_all/0</c></seemfa>.</p>
</desc>
</func>
diff --git a/lib/runtime_tools/doc/src/system_information.xml b/lib/runtime_tools/doc/src/system_information.xml
index a356b5c6f8..8cb43ed520 100644
--- a/lib/runtime_tools/doc/src/system_information.xml
+++ b/lib/runtime_tools/doc/src/system_information.xml
@@ -60,8 +60,8 @@
is invalid.</p></item>
<tag><c><anno>MissingRuntimeDependencies</anno></c></tag>
<item><p>An application is missing
- <seealso marker="kernel:app#runtime_dependencies">runtime
- dependencies</seealso>. The second element identifies the
+ <seefile marker="kernel:app#runtime_dependencies">runtime
+ dependencies</seefile>. The second element identifies the
application (with version) that has missing dependencies.
The third element contains the missing dependencies.</p>
<p>Note that this check use application versions that
@@ -70,11 +70,11 @@
installed in the system, but if those are not loaded this
check will fail. The system will of course also fail when
used like this. This may happen when you have multiple
- <seealso marker="doc/system_principles:versions">branched
- versions</seealso> of the same application installed in the
+ <seeguide marker="system/system_principles:versions">branched
+ versions</seeguide> of the same application installed in the
system, but you do not use a
- <seealso marker="doc/system_principles:system_principles#BOOTSCRIPT">boot
- script</seealso> identifing the correct application version.</p>
+ <seeguide marker="system/system_principles:system_principles#BOOTSCRIPT">boot
+ script</seeguide> identifing the correct application version.</p>
</item>
</taglist>
<p>Currently the sanity check is limited to verifying
diff --git a/lib/runtime_tools/examples/function-calls.d b/lib/runtime_tools/examples/function-calls.d
index f8ca388228..a51ff51253 100644
--- a/lib/runtime_tools/examples/function-calls.d
+++ b/lib/runtime_tools/examples/function-calls.d
@@ -19,39 +19,85 @@
* %CopyrightEnd%
*/
+/**
+ * Triggered on local function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ * @param arg2 depth
+ */
erlang*:::local-function-entry
{
printf("pid %s enter (local) %s depth %d\n",
copyinstr(arg0), copyinstr(arg1), arg2);
}
+/**
+ * Triggered on global function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ * @param arg2 depth
+ */
erlang*:::global-function-entry
{
printf("pid %s enter (global) %s depth %d\n",
copyinstr(arg0), copyinstr(arg1), arg2);
}
+/**
+ * Triggered upon function return, either global or
+ * local
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the returned from function
+ * @param arg2 depth
+ */
erlang*:::function-return
{
printf("pid %s return %s depth %d\n",
copyinstr(arg0), copyinstr(arg1), arg2);
}
+/**
+ * Triggered on built-in function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ */
erlang*:::bif-entry
{
printf("pid %s BIF entry mfa %s\n", copyinstr(arg0), copyinstr(arg1));
}
+/**
+ * Triggered on built-in function return
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the returned from function
+ */
erlang*:::bif-return
{
printf("pid %s BIF return mfa %s\n", copyinstr(arg0), copyinstr(arg1));
}
+/**
+ * Triggered on native function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ */
erlang*:::nif-entry
{
printf("pid %s NIF entry mfa %s\n", copyinstr(arg0), copyinstr(arg1));
}
+/**
+ * Triggered upon native function return
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the returned from function
+ */
erlang*:::nif-return
{
printf("pid %s NIF return mfa %s\n", copyinstr(arg0), copyinstr(arg1));
diff --git a/lib/runtime_tools/examples/function-calls.systemtap b/lib/runtime_tools/examples/function-calls.systemtap
index 6bb173b3ec..8f748ce0d1 100644
--- a/lib/runtime_tools/examples/function-calls.systemtap
+++ b/lib/runtime_tools/examples/function-calls.systemtap
@@ -29,39 +29,85 @@
* to your environment.
*/
+/**
+ * Triggered on local function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ * @param arg2 depth
+ */
probe process("beam.smp").mark("local-function-entry")
{
printf("pid %s enter (local) %s depth %d\n",
user_string($arg1), user_string($arg2), $arg3);
}
+/**
+ * Triggered on global function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ * @param arg2 depth
+ */
probe process("beam.smp").mark("global-function-entry")
{
printf("pid %s enter (global) %s depth %d\n",
user_string($arg1), user_string($arg2), $arg3);
}
+/**
+ * Triggered upon function return, either global or
+ * local
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the returned from function
+ * @param arg2 depth
+ */
probe process("beam.smp").mark("function-return")
{
printf("pid %s return %s depth %d\n",
user_string($arg1), user_string($arg2), $arg3);
}
+/**
+ * Triggered on built-in function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ */
probe process("beam.smp").mark("bif-entry")
{
printf("pid %s BIF entry mfa %s\n", user_string($arg1), user_string($arg2));
}
+/**
+ * Triggered on built-in function return
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the returned from function
+ */
probe process("beam.smp").mark("bif-return")
{
printf("pid %s BIF return mfa %s\n", user_string($arg1), user_string($arg2));
}
+/**
+ * Triggered on native function entry
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the function
+ */
probe process("beam.smp").mark("nif-entry")
{
printf("pid %s NIF entry mfa %s\n", user_string($arg1), user_string($arg2));
}
+/**
+ * Triggered upon native function return
+ *
+ * @param arg0 pid
+ * @param arg1 MFA of the returned from function
+ */
probe process("beam.smp").mark("nif-return")
{
printf("pid %s NIF return mfa %s\n", user_string($arg1), user_string($arg2));
diff --git a/lib/runtime_tools/src/appmon_info.erl b/lib/runtime_tools/src/appmon_info.erl
index d64206decf..a12cea8f15 100644
--- a/lib/runtime_tools/src/appmon_info.erl
+++ b/lib/runtime_tools/src/appmon_info.erl
@@ -713,7 +713,11 @@ format(P) when is_pid(P) ->
_ -> pid_to_list(P)
end;
format(P) when is_port(P) ->
- "port " ++ integer_to_list(element(2, erlang:port_info(P, id)));
+ case erlang:port_info(P, id) of
+ undefined -> "port closed";
+ {_, Pid} ->
+ "port " ++ integer_to_list(Pid)
+ end;
format(X) ->
io:format("What: ~p~n", [X]),
"???".
diff --git a/lib/runtime_tools/src/erts_alloc_config.erl b/lib/runtime_tools/src/erts_alloc_config.erl
index 845efaf9ef..d8133ee14f 100644
--- a/lib/runtime_tools/src/erts_alloc_config.erl
+++ b/lib/runtime_tools/src/erts_alloc_config.erl
@@ -356,14 +356,23 @@ save_scenario(AlcList) ->
process_flag(priority, OP),
Res.
-save_ai2(Alc, AI) ->
- Alc1 = chk_sbct(Alc, AI),
- case ai_value(mbcs, blocks_size, AI) of
- {blocks_size, MinBS, _, MaxBS} ->
- set_alloc_util(chk_mbcs_blocks_size(Alc1, MinBS, MaxBS), true);
- _ ->
- set_alloc_util(Alc, false)
- end.
+save_ai2(#alloc{name=Name}=Alc0, AI) ->
+ Alc1 = chk_sbct(Alc0, AI),
+
+ {Alc, IsAUtil} =
+ case ai_value(mbcs, blocks, AI) of
+ {blocks, Bs} ->
+ case ai_value(Name, size, Bs) of
+ {size, MinBS, _, MaxBS} ->
+ {chk_mbcs_blocks_size(Alc1, MinBS, MaxBS), true};
+ _ ->
+ {Alc1, false}
+ end;
+ _ ->
+ {Alc1, false}
+ end,
+
+ set_alloc_util(Alc, IsAUtil).
save_ai(Alc, [{instance, 0, AI}]) ->
save_ai2(Alc, AI);
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 3a24986381..e38757b939 100644
--- a/lib/runtime_tools/src/observer_backend.erl
+++ b/lib/runtime_tools/src/observer_backend.erl
@@ -433,7 +433,9 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
ReturnMS = [{'_',[],[{return_trace}]}],
erlang:trace_pattern({erlang,spawn,3},ReturnMS,[meta]),
erlang:trace_pattern({erlang,spawn_link,3},ReturnMS,[meta]),
- erlang:trace_pattern({erlang,spawn_opt,1},ReturnMS,[meta]),
+ erlang:trace_pattern({erlang,spawn_opt,4},ReturnMS,[meta]),
+ erlang:trace_pattern({erts_internal,spawn_init,1},[],[meta]),
+ erlang:trace_pattern({erts_internal,dist_spawn_init,1},[],[meta]),
erlang:trace_pattern({erlang,register,2},[],[meta]),
erlang:trace_pattern({global,register_name,2},[],[meta]),
ok;
@@ -459,7 +461,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
{trace_ts,_,call,{global,register_name,[Name,Pid]},_} ->
ok = ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
- {trace_ts,CallingPid,call,{erlang,spawn_opt,[{M,F,Args,_}]},_} ->
+ {trace_ts,CallingPid,call,{erlang,spawn_opt,[M,F,Args,_]},_} ->
MFA = {M,F,length(Args)},
NewAcc = dict:update(CallingPid,
fun(Old) -> [MFA|Old] end, [MFA],
@@ -497,6 +499,16 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
Acc),
ttb_meta_tracer_loop(MetaFile,PI,NewAcc,State);
+ {trace_ts,CallingPid,call,{erts_internal,spawn_init,[{M,F,Args}]},_} ->
+ %% Local spawn_request()...
+ ok = ttb_store_meta({pid,{CallingPid,{M,F,length(Args)}}},MetaFile),
+ ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
+
+ {trace_ts,CallingPid,call,{erts_internal, dist_spawn_init, [MFnoA]},_} ->
+ %% Distributed spawn_request()...
+ ok = ttb_store_meta({pid,{CallingPid,MFnoA}},MetaFile),
+ ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
+
{metadata,Data} when is_list(Data) ->
ok = ttb_store_meta(Data,MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
@@ -530,7 +542,9 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
try_stop_overload_check(State),
erlang:trace_pattern({erlang,spawn,3},false,[meta]),
erlang:trace_pattern({erlang,spawn_link,3},false,[meta]),
- erlang:trace_pattern({erlang,spawn_opt,1},false,[meta]),
+ erlang:trace_pattern({erlang,spawn_opt,4},false,[meta]),
+ erlang:trace_pattern({erts_internal,spawn_init,1},false,[meta]),
+ erlang:trace_pattern({erts_internal,dist_spawn_init,1},false,[meta]),
erlang:trace_pattern({erlang,register,2},false,[meta]),
erlang:trace_pattern({global,register_name,2},false,[meta]);
stop ->
@@ -752,6 +766,7 @@ sys_tables() ->
mnesia_gvar, mnesia_stats,
% mnesia_transient_decision,
pg2_table,
+ pg,
queue,
schema,
shell_records,
@@ -763,7 +778,7 @@ sys_tables() ->
sys_processes() ->
[auth, code_server, global_name_server, inet_db,
- mnesia_recover, net_kernel, timer_server, wxe_master].
+ mnesia_recover, net_kernel, pg, timer_server, wxe_master].
mnesia_tables() ->
[ir_AliasDef, ir_ArrayDef, ir_AttributeDef, ir_ConstantDef,
diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src
index b026048b94..d7c2975a5b 100644
--- a/lib/runtime_tools/src/runtime_tools.app.src
+++ b/lib/runtime_tools/src/runtime_tools.app.src
@@ -29,5 +29,5 @@
{applications, [kernel, stdlib]},
{env, []},
{mod, {runtime_tools, []}},
- {runtime_dependencies, ["stdlib-3.0","mnesia-4.12","kernel-5.0",
- "erts-8.0"]}]}.
+ {runtime_dependencies, ["stdlib-3.13","mnesia-4.12","kernel-7.0",
+ "erts-11.0"]}]}.
diff --git a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
index 6ae51d9a26..9ab61b89d2 100644
--- a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
+++ b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
@@ -25,7 +25,9 @@
-include_lib("common_test/include/ct.hrl").
%-compile(export_all).
--export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2]).
%% Testcases
-export([basic/1]).
@@ -40,6 +42,18 @@ suite() ->
all() ->
[basic].
+init_per_suite(Config) ->
+ case test_server:is_asan() of
+ true ->
+ %% No point testing own allocators under address sanitizer.
+ {skip, "Address sanitizer"};
+ false ->
+ Config
+ end.
+
+end_per_suite(_Config) ->
+ ok.
+
init_per_testcase(Case, Config) when is_list(Config) ->
[{testcase, Case},
{erl_flags_env, save_env()} | Config].
diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk
index c01dd60009..e62d59acf6 100644
--- a/lib/runtime_tools/vsn.mk
+++ b/lib/runtime_tools/vsn.mk
@@ -1 +1 @@
-RUNTIME_TOOLS_VSN = 1.14
+RUNTIME_TOOLS_VSN = 1.16