lib/spry.ex

defmodule Spry do
  @moduledoc """
  Documentation for `Spry`.
  """

  defp spry() do
    require IEx;
    IEx.configure(inspect: [limit: :infinity])

    all_pids = :application.info[:running]
    suspended = Enum.reduce all_pids, [], fn process, suspended ->
      name = elem(process, 0)
      pid = elem(process, 1)

      suspended = cond do

        pid == :undefined ->
          suspended

        name == :iex ->
          suspended

        # Don't suspend our own project - might not be necessary!
        # name == Mix.Project.get!().project[:app] ->
          # suspended

        # Don't suspend ourself
        pid == self() ->
          suspended
        true ->
          :erlang.suspend_process(pid)
          suspended ++ [pid]
      end
      suspended
    end

    IEx.pry()

    Enum.map suspended, fn pid ->
      :erlang.resume_process(pid)
    end

  end
end