IT TIP

Elixir의 디버깅 및 디버깅 도구?

itqueen 2020. 11. 20. 17:33
반응형

Elixir의 디버깅 및 디버깅 도구?


저는 Elixir를 막 사용하기 시작했고 Phoenix 프로젝트를 시작했습니다. 이제 Rails에 대한 배경 지식을 가지고 있기 때문에 "debugger", "byebug"등과 같은 디버깅 도구를 사용하는 데 익숙해졌습니다. Elixir에 유사한 도구가 있는지 궁금합니다. Elixir 애플리케이션을 어떻게 디버깅하고 있습니까?

Rubys와 동등한 것조차도 raise my_object.inspect놀라운 일을 할 것입니다!

감사합니다


당신이 사용할 수있는 IEx

require IEx

value = {:some, :erlang, :value}
IEx.pry

예를 들어 iex -s program.exs(또는 iex -S mix프로젝트의 경우) 이 프로그램을 시작하면 이 코드에 도달했을 때이 코드를 들여다 볼 수 있는지 여부를 묻는 메시지가 표시되고 value검사를 위해 사용할 수 있습니다.

IO.inspect기본적으로 모든 erlang 데이터 구조를 출력 할 수 있도록 하여 인쇄 디버깅을 수행 할 수도 있습니다 .


카우보이 앱 및 Phoenix 앱 디버깅.

나는 Elixir rader http://www.jessetrimble.net/iex-pry-elixir 에서이 게시물을 보았고 매우 편리하기 때문에 여기에 요약 할 것이라고 생각했습니다. :-).

Rails 애플리케이션 (및 기타)에서 컨트롤러의 디버거 태그를 간단히 삽입 할 수 있으며 경로가 트리거되면 디버거 태그에서 중단됩니다.

Phoenix에서 pry를 사용할 때 위의 결과는

Cannot pry #PID<0.259.0> at web/controllers/posts_controller.ex:8. Is an IEx shell running?

Phoenix 프로세스는 IEx 세션 내에서 실행되어야한다는 것이 밝혀졌습니다.

iex -S mix phoenix.server

이제 대신 당신은 볼 것입니다

Request to pry #PID<0.266.0> at web/controllers/posts_controller.ex:9. Allow? [Yn]

https://github.com/qhool/quaffQuaff.Debug 에서 모듈을 사용할 수 있습니다.

Debug 모듈은 erlang 그래픽 디버거에서 Elixir 코드를 실행하기위한 간단한 도우미 인터페이스를 제공합니다.

오늘 Elixir 1.0.4로 테스트했는데 작동합니다.


Erlang 디버거를 사용하십시오. Phoenix 1.3 및 Elixir 1.5.1의 예, 소스 파일 : ./lib/todo/api/api.ex 및 모듈 이름 : Todo.API

~/elixir/todo_app/ iex -S mix phx.server
Erlang/OTP 20 [erts-9.0] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

[info] Running TodoWeb.Endpoint with Cowboy using http://0.0.0.0:4000
Interactive Elixir (1.5.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :debugger.start()
{:ok, #PID<0.373.0>}
iex(2)> :int.ni(Todo.API)
{:module, Todo.API}

Erlang 디버거에서 :

  • 모니터 창의 왼쪽 패널에는로드 된 모듈이 표시됩니다.
  • 모듈 메뉴, 하단 항목은 '보기'및 '삭제'하위 메뉴와 함께로드 된 모듈을 보여줍니다. 보기 메뉴를 사용하여 행 번호가있는 소스를보십시오.
  • 중단 점을 배치하려면 중단 메뉴, 줄 바꿈 ...을 사용하십시오.
  • 프로그램이 지정된 줄에서 멈출 때까지 실행하십시오. 모니터 창에는 상태가 '중단'인 프로세스가 표시됩니다. 디버거에서 연결된 프로세스를 열려면이 줄을 두 번 클릭합니다. 여기서 스텝, 스텝 오버 (다음), 계속, 올라 가기, 값 검사 등을 할 수 있습니다. 다른 모듈로 들어가려면 위와 같이로드해야합니다.
  • 올바르게 배치되지 않으면 중단 점이 무시됩니다. 여러 줄 파이프 라인이있는 경우 마지막 줄에 중단 점을 배치합니다.

Elixir 1.5 및 OTP 20에는 Exception.blame/3특정 예외에 디버그 정보를 추가 할 수 있는 새로운 기능 이 있습니다. 지금은 지원할 FunctionClauseErrors뿐이며 비용이 많이 드는 작업이므로 개발시에만 사용해야합니다. 함수는 바이트 코드에서 사용 가능한 절을 검색하고 주어진 인수에 대해 평가합니다. 릴리스보기


byebug와 유사한 테스트를 디버그하는 방법이 있습니다. 명령을 사용하면 iex -S mix test테스트가 실행되고 IEx.pry가 발견되면 여기서 "중지"하고 컨텍스트를 분석할지 묻는 메시지가 표시됩니다.

코드 예 :

defmodule AppTest do
  def hello do
    test_variable = "john doe"
    require IEx; IEx.pry
    :world
  end
end
defmodule AppTestTest do
  use ExUnit.Case
  doctest AppTest

  test "greets the world" do
    assert AppTest.hello() == :world
  end
end

iex -S mix test그것을 실행 하면 require IEx; IEx.pry.

Source: https://elixirforum.com/t/how-to-debug-exunit-tests-with-debugger/14170/4

참고URL : https://stackoverflow.com/questions/28724372/debugging-and-debugging-tools-in-elixir

반응형