I understand that I can set a seq_trace in erlang to the current process that is executing. But how can I set it on another process from the shell, or remote shell like dbg tracing?
1
There are 1 best solutions below
Related Questions in ERLANG
- Using gleam, cannot import 'gleam/otp/process'
- Zig Concurrency Vs Erlang Concurrency, is Zig less efficient than Erlang?
- Creaating a new Key Value dict from previous dict
- How to execute an exit function before closing rebar3 shell?
- rebar3 does not compile anything in `src` directory
- Ejabberd Migration from 23 to 24
- How to use compiled erlang modules in an elixir project?
- ejabberd_sql:handle_reconnect/2:491 odbc connection failed ejabberd
- Lisp Flavored Erlang: Can't find include lib include/ltest-macros.lfe
- Signing key for RabbitMQ
- Rabbitmq fails to start and getting Erlang eaacces error
- Erlang: binary_to_term explanation
- How to extend emqx clientInfo to get more fields during HTTP Authorization
- Transforming `erl_parse:abstract_form()` to `erl_syntax:syntaxTree()`
- Who is the sender of Erlang's trace messages and what can I assume based on it?
Related Questions in ELIXIR
- Phoenix in a docker dev environment - generated code can't be saved from VSCode
- Microsoft Teams, Graph API, send message to channel InsufficientPrivileges MessageWritesBlocked-Thread is not marked for import
- Can someone tell me what's wrong with mi Task.await?
- Is there a Sonar-Elixir plugin compatible with SonarQube 10.4.1?
- How to use Elixir pattern matching to check if a list's item startswith a given string(in a variable)?
- Error `unknown application: :nif_bartender` when compiling Elixir NIF
- How to use compiled erlang modules in an elixir project?
- OnVif authentication failed for Milesight camera
- Debugging Boggle Solver Implemented in Elixir with Trie Structure
- Elixir Enum.group_by converts integers to ASCII Chars
- Disambiguate "arity denotation" and "arithmetic division" in Elixir
- LiveView [LiveMotion] Motion element not found, make your target a LiveMotion.motion component
- What exactly is flushed by flush/0 in Elixir?
- Attempting to understand the difference in computed result for a Math.imul (javascript) recreation in Elixir
- Cronjob does not work for the local asdf elixir path
Related Questions in LFE
- Lisp Flavored Erlang - Messaging primitives
- feols - fixest: loop over dependent variable
- R stargazer package output: Missing F statistic for felm regression (lfe package)
- How to export the regression table for the results with robust standard error or clustered standard error with package lfe?
- Marginal effects / interaction plots for lfe felm regression object
- predict method for felm from lfe package
- Value from binding in LFE interpreter using Erlang
- rebar3 fails to fetch and copy dependencies (LFE project)
- Gun http client not printing response body
- Not able to apply guard expression in query list comprehension
- Arity of + and - operators in Lisp Flavored Erlang
- Lisp Flavored Erlang on Windows
- How do I install LFE on Ubuntu Karmic?
- Setting seq_trace on another process
- Question about p-values with clustered standard errors in LFE package in R
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
You can enable sequential tracing on another process using
dbg. For example, let's say we have a modulexwith an exportedcall/2function:This function implements a simple call-response. Let's also say we have a module
ythat has a looping receiver function:This function expects a message of the form sent by
x:call/2, and when it receives one it prints a message into the sequential trace, if enabled, and then sends the original message back to the caller augmented with a timestamp. It ignores all other messages.We also need a function to collect the sequential trace. The recursive
systracer/1function below just collectsseq_tracetuples into a list, and produces the list ofseq_tracemessages when asked:Let's assume our
systracer/1function is exported from modulexas well.Let's use our Erlang shell to set this all up. First, let's spawn
y:loop/0andx:systracer/1:After spawning
x:systracer/1we set the process as theseq_tracesystem tracer. Now we need to startdbg:These
dbgcalls are pretty standard, but you can feel free to vary them as needed especially if you plan to usedbgtracing during your debug session as well.In practice when you enable sequential tracing with
dbg, you typically do so by keying on a particular argument to a function. This enables you to get a trace specific to a given function invocation without getting traces for all invocations of that function. Along these lines, we'll usedbg:tpl/3to turn on sequential trace flags whenx:call/2is invoked with its second argument having the value of the atomtrace. First, we usedbg:fun2ms/1to create the appropriate match specification to enable the sequential tracing flags we want, then we'll apply the match spec withdbg:tpl/3:Now we can call
x:call/2with the second argumenttraceto cause sequential tracing to occur. We make this call from a spawned process to avoid having shell I/O-related messages appearing in the resulting trace:The first line of output comes from normal
dbgtracing, since we specifieddbg:p(all, call)earlier. To get the sequential trace results, we need to get a dump from oursystrace/1process:This sends all sequential trace collected so far to our shell process. We can use the shell
flush()command to view them:And sure enough, these are the sequential trace messages we expected to see. First, for the message containing the
traceatom, we have the send fromx:call/2followed by the reception iny:loop/0and the result ofseq_trace:print/1, then the send fromy:loop/0back to the caller ofx:call/2. Then, sincex:call(Y,foo)is called in the same process, which means all the sequential tracing flags are still enabled, the first set of sequential trace messages is followed by a similar set for thex:call(Y,foo)invocation.If we just call
x:call(Y,foo)we can see we get no sequential trace messages:This is because our match spec enables sequential tracing only when the second argument to
x:call/2is the atomtrace.For more information, see the
seq_traceanddbgman pages, and also read the match specification chapter of the Erlang Run-Time System Application (ERTS) User's Guide.