Ruby 스크립트를 디버깅하는 방법 [닫기]


153

인터넷에서 다음 Ruby 코드를 복사하여 약간 변경했지만 작동하지 않습니다.

프로그램을 직접 디버깅하려면 어떻게해야합니까?


1
재개 투표. OP는 분명히 GDB와 같은 단계 디버그를 원합니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

답변:


145

Pry ( GitHub )를 사용하십시오 .

다음을 통해 설치하십시오.

$ gem install pry
$ pry

그런 다음 다음을 추가하십시오.

require 'pry'; binding.pry

당신의 프로그램으로.

현재 pry0.12.2 그러나, 네비게이션 등의 명령하지있다 next, break다른 어떤 보석이 별도로 제공 등이 예를 들면 참조 pry-byedebug.


10
또한 Pry (생명 교환기!)를 사용하는 것이 좋습니다. 프로그램에 설치하고 요구 한 후에는 중단 점을 작성하는 것이 쉽습니다 binding.pry. 또한 색상 완성, 문서 조회 및 메소드를 동적으로 편집 및 다시로드 할 수있는 가능성도 제공됩니다.
Andrea Fiore

5
Pry의 홈페이지는 pryrepl.org에서 확인할 수 있습니다 .
shadowbq

4
Pry/ byebug훌륭하지만 디버깅 할 때 첫 번째 단계는 아닙니다. 대부분의 경우 예외를 발생 raise object.inspect시키면 irb 세션을 여는 것보다 문제가 더 빨리 해결됩니다. 예외 발생과 같은 간단한 솔루션으로 문제를 해결할 수없는 콘솔 디버거 만 사용하는 것이 좋습니다.
Kelsey Hannan

3
?로 단일 단계 코드를 작성하는 방법이 pry있습니까? 나는 그것을하는 방법을 찾을 수 없었다. 그것이 내가 디버거에 기대하는 것입니다.
jpetazzo

2
@jpetazzo yes, 'next'를 입력 함
marcbest

114
  1. 루비에서 :

    ruby -rdebug myscript.rb 

    그때,

    • b <line>: 중단 점을 넣습니다
    • n(ext)또는 s(tep)c(ontinue)
    • p(uts) 디스플레이 용

    (펄 디버그와 같은)

  2. Rails에서 :

    script/server --debugger

    및 추가 debugger코드에서.


7
-rdebug는 쓰레기입니다. 그리고 유지되지 않은. Pry를 사용하십시오 (다른 답변 참조).
Snowcrash

3
@SnowCrash-왜 -r debug쓰레기 라고 말 합니까?
sid smith

8
-rdebug 사용 : 디버그하기 위해 소스 파일을 변경할 필요가 없습니다.
germanlinux

2
새로운 Ruby / Rails 애플리케이션의 경우 Pry가 정답입니다. 그러나 facets보석 요구 사항 의 특정 버전으로 Rails 2.2 앱에서 실행할 고대 버전의 Pry를 찾으려고 한 시간이 걸렸지 만 실패했습니다. 고대 Rails 앱의 ruby-debug경우 다소 불쾌하지만 작업이 완료됩니다.
Abe Voelker

56

난간 권장 : pry를 사용하십시오! 나는 이것에 대해서만 동의 할 수 있습니다.

pry는 irb보다 훨씬 좋습니다.

당신은 추가해야합니다

require 'pry'

소스 파일에 추가하고 추가하여 소스 코드에 중단 점을 삽입하십시오.

binding.pry

사물을 보려는 곳에서 (이것은 고전적인 IDE 환경에서 중단 점을 트리거하는 것과 같습니다)

프로그램이

binding.pry

라인을 사용하면 프로그램의 모든 컨텍스트를 바로 사용할 수있는 pry repl에 바로 들어갈 수 있으므로 모든 것을 탐색하고 모든 객체를 조사하고 상태를 변경하며 코드를 즉시 변경할 수도 있습니다.

현재 사용중인 메소드의 코드를 변경할 수 없으므로 슬프게도 다음 줄을 변경할 수 없습니다. 그러나 좋은 루비 코드는 어쨌든 한 줄인 경향이 있습니다 ;-)


30

예외를 제기하여 디버깅하는 것은로그 문을통해 가늘게 뜨는 것보다 훨씬 쉽고print 대부분의 버그의 경우 일반적으로또는같은 irb 디버거를 여는 보다 훨씬 빠릅니다 . 이러한 도구가 항상 첫 번째 단계는 아닙니다.prybyebug


루비 / 레일 디버깅 :

1. 빠른 방법 : Exception그때와 .inspect그 결과를 올립니다

Ruby (특히 Rails) 코드를 디버깅 하는 가장 빠른 방법 은 메소드 또는 객체 (예 raise:)를 호출 .inspect하는 동안 코드의 실행 경로를 따라 예외를 처리하는 것입니다 foo.

raise foo.inspect

위의 코드에서 코드의 실행중지시키는를raise 트리거하고 디버그하려는 행 의 객체 / 방법 (예 :)에 대한 정보가 포함 된 오류 메시지를 반환합니다 . Exception.inspectfoo

이 기법은 객체 나 메소드 를 신속하게 검사하고 ( 예 : nil? ) 주어진 라인 내에서 코드 라인이 실행되고 있는지 즉시 확인 하는 데 유용합니다 .

2. 대체 : 또는 같은 루비 IRB 디버거를 사용하십시오byebugpry

코드 실행 흐름의 상태에 대한 정보를 얻은 후에 만 ​​루비 젬 irb 디버거로 이동 pry하거나 byebug실행 경로 내의 객체 상태를 더 깊이 파고들 수있는 곳을 고려해야 합니다.


일반 초보자 조언

문제를 디버깅하려고 할 때는 항상 다음과 같이하는 것이 좋습니다 .! @ # $ ing 오류 메시지 (RTFM)

오류 메시지를 읽고 의미 신중 하고 완전히 당신이 그렇게 행동하기 전에 당신을 말하려고 무엇을 이해합니다. 디버깅 할 때 오류 메시지를 읽을 때 다음과 같은 정신적 인 질문 을이 순서대로 수행하십시오 .

  1. 오류는 어떤 클래스를 참조합니까? (즉 , 올바른 객체 클래스가 nil있습니까 아니면 내 객체 입니까? )
  2. 오류는 어떤 방법을 참조합니까? (즉 , 메소드에서 유형입니다.이 유형 / 객체 클래스 에서이 메소드를 호출 할 수 있습니까? )
  3. 마지막으로, 마지막 두 질문에서 추론 할 수있는 것을 사용하여 어떤 코드 줄을 조사해야합니까? (추적 : 스택 추적의 마지막 코드 줄이 반드시 문제가있는 것은 아닙니다.)

스택 추적에서 프로젝트에서 나오는 코드 줄 (예 : app/...Rails를 사용 하는 경우 시작하는 줄)에 특히주의하십시오 . 99 %의 시간이 자신의 코드에 문제가 있습니다.


이 순서대로 해석 하는 것이 중요한 이유를 설명 하기 위해 ...

예를 들어 많은 초보자에게 혼란을주는 루비 오류 메시지 :

어떤 시점에서 다음과 같이 실행되는 코드를 실행합니다.

@foo = Foo.new

...

@foo.bar

다음과 같은 오류가 발생합니다.

undefined method "bar" for Nil:nilClass

초보자는이 오류를보고 문제가 메소드 bar정의되어 있지 않다고 생각합니다 . 그렇지 않습니다. 이 오류에서 중요한 부분은 다음과 같습니다.

for Nil:nilClass

for Nil:nilClass그 의미 @foo는 Nil입니다! 인스턴스 변수 @foo가 아닙니다 Foo! 의 객체가 Nil있습니다. 이 오류가 표시되면 단순히 bar클래스의 객체에 대해 메소드 가 존재하지 않는다는 것을 나타내는 루비 Nil입니다. (잘 모르겠습니다! 클래스가 Foo아닌 객체의 메소드를 사용하려고 시도했기 때문에 Nil).

불행히도,이 오류가 어떻게 작성되는지 ( undefined method "bar" for Nil:nilClass) 때문에이 오류가와 관련이 있다고 생각하기가 쉽지 bar않습니다 undefined. 주의 깊게 읽지 않으면이 오류로 인해 초보자가 실수로 bar메소드 의 세부 사항을 파고 들어가 Foo오브젝트의 클래스가 잘못되었음을 암시하는 오류 부분이 완전히 없어집니다 (이 경우 : nil). 오류 메시지 전체를 읽음으로써 쉽게 피할 수있는 실수입니다.

요약:

디버깅을 시작하기 전에 항상 전체 오류 메시지 를 주의 깊게 읽으십시오 . 그 말은 : 항상 확인 클래스 오류 메시지에서 개체의 유형을 먼저 다음의 방법을 , 전에 당신이 오류가 발생 할 수있다 생각하고있는 모든 스택 트레이스 또는 코드의 라인으로 뒤를 쫓고 시작합니다. 이 5 초는 5 시간의 좌절을 줄일 수 있습니다.

tl; dr : 인쇄 로그를 긁지 마십시오. 예외를 발생 시키거나 irb 디버거를 대신 사용하십시오. 디버깅 전에 오류를주의 깊게 읽어 토끼 구멍을 피하십시오.


3
인쇄 로그를 읽는 것이 지루하다는 점에 동의하지만 처음에는 디버거를 사용하지 않는 것이 좋습니다. 중단 점을 추가하고 트리거하는 것은 예외를 발생시키는 것과 똑같은 노력이지만 응용 프로그램의 현재 상태를 완전히 볼 수있게합니다. 모호한 상태를 검사 한 결과로 추가 질문이 있으면 다른 예외를 추가하고 응용 프로그램을 다시 시작하는 대신 대화식으로 드릴 다운 할 수 있습니다.
Patrick R.

2
@ 패트릭 내 경험상 IRB 디버거는 여전히 코드의 문제가있는 으로 정확하게 드릴 다운하려고 할 때 좋은 첫 단계가 아닙니다 . 많은 IRB 중단 점을 추가하고 제거하면 예외를 추가하는 것보다 시간이 더 오래 걸리며, 초보자가 잘못된 가정을 걸러 낼 수있는 방식으로 코드의 제어 흐름에 대한 명확한 대답을 제공하지 않습니다. IRB 중단 점도 잊어 버리기 때문에 요청이 중단 될 때 혼동을 일으 킵니다. 문제의 위치를 정확히 알고 상태를 디버깅해야하는 경우 IRB 디버거로 시작하십시오. 그러나 종종 사실이 아닙니다.
Kelsey Hannan 2012

1
하! 오류 메시지를 읽는 것이 Ruby에 도움이되지만 다른 스크립팅 언어에 도움이 됩니까? 귀찮게하지 않은 OP를 비난 할 수 없습니다.
kayleeFrye_onDeck

1
내 초기 반응은 @PatrickR과 비슷했지만 어쨌든 시도했습니다. 결국, 나는 이것이 나쁜 조언이거나, 아마도 가장 좋은 관점에서, 내가 가진 것과 다른 사용 사례에 맞춘 조언이라고 생각합니다. 특히 (a) Rails를 사용하지 않고 (b) 잘못된 결과가 있지만 오류나 예외가 발생하지 않은 경우, 즉 코드가 숫자를 계산하면 숫자가 잘못됩니다. 충돌을 실행하는 프로그램을 만들 위치를 반복적으로 추측하는 것은 전략이지만 계속 다시 시작하고 다시 실행해야하기 때문에 더 많은 작업이 필요합니다. 각 사이클마다 고유 한 시작 시간이 있습니다.
Brick

20
  1. 가능할 때마다 변수를 인쇄하십시오. 이것을 printf 디버깅이라고합니다.

    STDERR.puts x.inspect

    또는

    STDERR.puts "Variable x is #{x.inspect}"

    입력하기 쉽도록하려면 예시 보석 을 사용할 수 있습니다 .

  2. 경고를 켭니다. 실행중인 경우 스위치 (예 :) ruby로 실행하십시오 . irb에서 실행 중이고 1.9.2 이전의 루비 버전을 사용중인 경우 세션 시작시 입력 하십시오. 인스턴스 변수의 철자를 잘못 입력하면 경고가 표시되면-wruby -w script.rb$VERBOSE = true

    경고 : 인스턴스 변수 @valeus가 초기화되지 않았습니다

  3. 이진 절단의 개념 이해 (다음 인용문은 Agile Developer의 실습 에서 인용 )

    문제 공간을 반으로 나누고 어느 절반에 문제가 있는지 확인하십시오. 그런 다음 반을 다시 반으로 나누고 반복하십시오.

  4. 이진 절단에 성공하면 예상대로 작동하지 않는 한 줄이있을 수 있습니다. 예를 들어

    [1, 2, 3].include?([1,2])

    falsereturn이라고 생각하더라도, 값을 제공합니다 true. 이 경우 설명서를 참조하십시오. 설명서 웹 사이트에는 ruby-doc.org 또는 APIdock이 있습니다. 후자의 경우 include?오른쪽 상단 근처에있는 돋보기 옆에 입력 include?하고 Array그 아래에있는 것을 선택하십시오 (무슨 클래스를 모르는 경우 irb를 [1, 2, 3]입력하십시오 [1, 2, 3].class) . (Array) , 이것이 수행하는 작업을 설명합니다.

    그러나 설명서가 도움이되지 않는 경우 전체 스크립트가 왜 수행하지 않는지보다는 특정 라인이 어떻게해야하는지에 대한 질문을 할 수 있다면 좋은 대답을 얻을 가능성이 더 큽니다. 해야한다.


7

모든 것을 삭제

2017 년에 오신 것을 환영합니다 ^ _ ^

자, 만약 당신이 새로운 IDE를 시험해 보는 것에 반대하지 않는다면, 당신은 다음을 무료로 할 수 있습니다 .

빠른 지침

  1. vscode 설치
  2. 아직 Ruby Dev Kit을 설치하지 않았다면 설치하십시오
  3. vscode 용 Ruby, ruby-linter 및 ruby-rubocop 확장 설치
  4. 필요한 경우 rubyide / vscode-ruby가 지정 하는 gem을 수동으로 설치
  5. 매크로 launch.json를 사용 "cwd"하여 "program" 필드 를 사용하도록 구성{workspaceRoot}
  6. 라는 필드를 추가 "showDebuggerOutput"하고로 설정하십시오.true
  7. 디버그 환경 설정의 모든 곳에서 중단 점 사용 "debug.allowBreakpointsEverywhere": true

자세한 지침

  1. Visual Studio Code 일명 다운로드 vscode; 이것은 Visual Studio 와 동일하지 않습니다 . 무료이며 가벼우 며 일반적으로 긍정적으로 간주됩니다.
  2. Ruby Dev Kit를 설치하십시오. https://github.com/oneclick/rubyinstaller/wiki/Development-Kit 에서 해당 리포지토리의 지침을 따라야합니다.
  3. 다음으로 웹 브라우저를 통해 또는 IDE 내부에 확장을 설치할 수 있습니다. 이것은 IDE 내부에 있습니다. 다른 것을 선택하면 여기 로 갈 수 있습니다 . vscode의 확장 부분으로 이동하십시오. 몇 가지 방법으로이 작업을 수행 할 수 있지만 가장 확실한 방법은 확장 프로그램 : 확장 프로그램 설치 옵션 이 제공 될 때까지 F1입력하고 입력하는 것입니다 . 대안은 상단 메뉴 바에서 그리고extCtrlShiftxView->Extensions
  4. 다음은 다음 확장을 원할 것입니다. 이것들은 100 % 필요하지는 않지만, 몇 가지 문제를 해결 한 후에 무엇을 보관해야하는지 결정하도록하겠습니다.
    • 루비; 확장 저자 Peng Lv
    • 루비-루보 캅; 확장 저자 미소 기
    • 루비 라이너; 확장 저자 Cody Hoover
  5. 루비 스크립트 디렉토리 안에는 커맨드 라인을 통해 디렉토리를 만들 것이고 .vscode거기에는 launch.json구성 옵션을 저장할 파일 이 있습니다.
    • launch.json 내용

{ "version": "0.2.0", "configurations": [ { "name": "Debug Local File", "type":"Ruby", "request": "launch", "cwd": "${workspaceRoot}", "program": "{workspaceRoot}/../script_name.rb", "args": [], "showDebuggerOutput": true } ] }

  1. 수동 gem 설치에 대해서는 확장 작성자의 지시 사항을 따르십시오. https://github.com/rubyide/vscode-ruby#install-ruby-dependencies : 여기에 있습니다
  2. 원하는 곳에 중단 점을 둘 수있는 기능을 원할 것입니다. 이 옵션을 사용하지 않으면 혼동 될 수 있습니다. 이렇게하려면 상단 메뉴 표시 줄로 이동하여 File->Preferences->Settings(또는 Ctrl,)를 선택 하고 Debug섹션에 도달 할 때까지 스크롤 합니다. 그것을 확장하고라는 필드를 찾으십시오 "debug.allowBreakpointsEverywhere"-해당 필드를 선택하고 작은 연필 모양의 아이콘을 클릭하고로 설정하십시오 true.

재미있는 일을 모두 한 후에는 2017 년 중반과 비슷한 메뉴에서 더 어두운 테마를 사용하여 중단 점을 설정하고 디버그 할 수 있어야 여기에 이미지 설명을 입력하십시오합니다. 콜 스택, 변수 뷰어 등과 같은 모든 재미있는 일이 있습니다.

가장 큰 PITA는 1) 사전 요구 사항 설치 및 2) .vscode\launch.json파일 구성 기억 입니다. # 2만이 미래의 프로젝트에 수하물을 추가해야하며 위에 나열된 것과 같은 일반적인 구성을 복사하면됩니다. 아마도 더 일반적인 설정 위치가있을 수 있지만, 나는 머리 꼭대기를 알지 못합니다.


지금은 2018 년이지만, 불행히도, 여기에 나열된 플러그인을 사용하여 단위 테스트를 디버깅 할 수는 없습니다…
MonsieurDart

1
@MonsieurDart이 글을 쓸 때 루비 스크립트의 기본 디버깅을위한 것입니다. 단위 테스트에 대해서는 특별히 익숙하지 않습니다. 이 답변이 잘못되었거나 구식 인 경우주의가 필요한 사항 및 처리 속도를 높이는 데 도움이되는 정보를 알려주십시오.
kayleeFrye_onDeck

안녕하세요 @kayleeFrye_onDeck! 귀하의 답변이 훌륭합니다. 그러나 마지막으로 VSC의 Peng Lv의 Ruby 플러그인을 확인했을 때 단위 테스트 (또는 다른 테스트) 내에서 중단 점을 설정할 수 없었습니다. 플러그인의 알려진 제한 중 하나였습니다. 사람들은 VSC 인스턴스를 구성하기 전에이 점을 알아야한다고 생각합니다. 시간이 걸리고 많은 사람들이 테스트를 실행하는 것이 코드를 작성하고 디버깅하는 가장 좋은 방법입니다. 😊
MonsieurDart

6

현재 코드를 디버깅 할 적절한 도구를 선택하기 위해이 비디오를 강력히 추천합니다.

https://www.youtube.com/watch?v=GwgF8GcynV0

개인적으로이 비디오에서 두 가지 큰 주제를 강조하겠습니다.

  • Pry는 디버그 데이터에 훌륭합니다. "Pry는 데이터 탐색기입니다"(sic)
  • 디버거는 단계별로 디버깅하는 것이 좋습니다.

그건 내 두 센트입니다!


6

다른 모든 답변은 이미 거의 모든 것을 제공합니다 ... 조금만 추가하십시오.

IDE와 유사한 디버거 (비 CLI)를 원하고 Vim을 편집기로 사용하는 것을 두려워하지 않는다면 Vim Ruby Debugger 플러그인을 권장 합니다.

그 문서는 매우 간단하므로 링크를 따라 가십시오. 즉, 편집기에서 현재 줄에 중단 점을 설정하고 일시 중지시 멋진 창에서 로컬 변수를 볼 수 있습니다. 거의 모든 일반적인 디버거 기능입니다.

Rails의 풍부한 로거 기능 이 거의 필요하지 않지만 Rails 앱을 디버깅하기 위해이 vim 디버거를 사용하는 것이 즐거웠 습니다.


6

방금이 보석을 발견했습니다 (Pry를 MRI Ruby 2.0 + 용 디버거로 바꿉니다)

https://github.com/deivid-rodriguez/pry-byebug

다음을 사용하여 설치 :

gem install pry-byebug

그런 다음을 정확하게 사용 pry하고 싶을 줄을 표시하십시오.

require 'pry'; binding.pry

달리 바닐라 놀리려는 그러나,이 보석과 같은 몇 가지 주요 탐색 GDB 같은 명령이 next, stepbreak:

break SomeClass#run            # Break at the start of `SomeClass#run`.
break Foo#bar if baz?          # Break at `Foo#bar` only if `baz?`.
break app/models/user.rb:15    # Break at line 15 in user.rb.
break 14                       # Break at line 14 in the current file.

5
  1. 길을 따라 변수를 인쇄 할 수 있습니다
  2. -w(경고) 플래그를 켭니다
  3. 루비 디버그 와 같은 도구를 사용하십시오.

2
나는 그것이 irb훌륭한 출발점 이라고 덧붙일 것 입니다. 의심스러운 작은 덩어리로 irb를 사용해보십시오. 나는 실행중인 프로그램을 멈추고 변수를 검사하고 irb에 빠진 다음 계속 실행하기 쉽기 때문에 ruby-debug (Ruby 1.9+의 경우 Ruby-debug19)를 좋아합니다.
Tin Man

5

Ruby 셸 스크립트를 쉽게 디버깅하려면 첫 번째 줄을 다음에서 변경하십시오.

#!/usr/bin/env ruby

에:

#!/usr/bin/env ruby -rdebug

그런 다음 디버거 콘솔이 표시 될 때마다 다음을 선택할 수 있습니다.

  • c계속 (다음 예외, 중단 점 또는 다음 행 debugger) :
  • n 다음 줄의 경우
  • w/ where프레임 / 호출 스택 표시
  • l 현재 코드를 보여주기 위해
  • cat 캐치 포인트를 표시합니다.
  • h 도움이 더 필요합니다.

ruby-debug gem 디버깅 , ruby-debug gem의 키 바로 가기 도 참조하십시오 .


스크립트가 중단 되고 역 추적이 필요한 경우 lldb/ gdblike를 사용해보십시오 .

echo 'call (void)rb_backtrace()' | lldb -p $(pgrep -nf ruby)

그런 다음 프로세스 전경을 확인하십시오.

교체 lldb와 함께 gdb하면 더 좋습니다. sudo비 소유 프로세스를 디버그하기위한 접두사 .


1
루비 디버그는 꽤 오래된 것으로 보입니다. ruby-debug 의 git repo는 올해 한 번만 커밋되었습니다. 여전히 활발하게 유지됩니까?
Andrew Grimm

또한 루비와 함께 패키지 된 것으로 보이며, 꼬집음에 좋습니다. 좋은 답변입니다!
Breedly

5

Ruby 2.4.0부터는 Ruby 프로그램 중간에 IRB REPL 세션을 시작하는 것이 더 쉽습니다. 프로그램에서 디버그하려는 지점에 다음 행을 넣으십시오.

require 'irb'
binding.irb

Ruby 코드를 실행하고 로컬 변수를 인쇄 할 수 있습니다. Ctrl + D를 입력하거나 quitREPL을 끝내고 Ruby 프로그램을 계속 실행 시키십시오.

당신은 또한 사용할 수 있습니다 putsp이 실행되는 프로그램에서 값을 출력 할 수 있습니다.


4

RubyMine 을 사용하는 경우 루비 스크립트 디버깅은 간단하고 간단합니다.

Ruby 스크립트 hello_world.rb가 있다고 가정하십시오.

1. 중단 점 설정

6 번 줄에 아래와 같이 중단 점을 설정하십시오.

여기에 이미지 설명을 입력하십시오

2. 디버깅 시작

이제 디버거를 시작하여 스크립트를 실행할 수 있습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

3. 변수 등 검사

그런 다음 실행이 중단 점에 도달하면 변수 등을 검사 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

참조를위한 추가 정보

  1. RubyMine사용하여 원격 디버깅을 수행 하려는 경우 그렇게 할 수 있습니다.
  2. docker 내부에서 실행되는 원격 디버그 레일에 RubyMine사용하려는 경우 에도 간단합니다.

RubyMine에서 외부 라이브러리를 디버깅 할 수있는 방법이 있습니까?
Am33d

2

printf 디버깅

디버깅 기술에 대해서는 항상 논쟁이 있었으며, 어떤 사람들은 print 문으로 디버깅하는 것을 좋아하고, 다른 사람들은 디버거를 깊이 파고 싶어합니다.

두 가지 접근 방식을 모두 시도해 보시기 바랍니다.

실제로 유닉스 노인 중 한 사람은 최근 printf 디버깅이 어떤 시점에서 그를 위해 더 빠른 방법이라고 말했다.

그러나 어떤 직업에 익숙하지 않고 코드의 큰 덩어리를 이해해야하는 경우, 여기저기서 단계별로 중단 점을두고 작동 방식과 함께 진행하는 것이 유용합니다.

코드가 짜는 방법을 이해해야합니다.

다른 사람 소프트웨어를 처음 사용하는 경우 해당 소프트웨어를 단계별로 실행하는 데 도움이 될 수 있습니다.

그들이 영리한 방식으로 정리했는지, 또는 그것이 단지 많은 똥인지 신속하게 알 수 있습니다.


이것은 의심의 여지없이 가장 좋은 대답입니다, 그것은
menriquez


1

모든 디버거의 어머니는 일반 오래된 인쇄 화면입니다. 대부분의 경우 간단한 객체 만 검사하고 싶을 것입니다. 빠르고 쉬운 방법은 다음과 같습니다.

@result = fetch_result

p "--------------------------"
p @result

이것은 쉽게 식별 할 수 있도록 @result의 내용을 앞에 줄과 함께 STDOUT으로 인쇄합니다.

Rails와 같은 자동로드 / 리로드 가능 프레임 워크를 사용하는 경우에는 앱을 다시 시작할 필요조차 없습니다. (프레임 워크 특정 설정으로 인해 디버깅중인 코드가 다시로드되지 않는 한)

나는 이것이 유스 케이스의 90 %에 효과적이라고 생각한다. 루비 디버그를 사용할 수도 있지만 대부분 과도하다고 생각합니다.


1

선택에 따라 다른 기능을 가진 많은 디버거가 있습니다. 내 우선 순위는 pry-moves 에 만족했습니다 .

  • 사용 방법에 대한 이해하기 쉬운 정보
  • 직관적 인 단계 (블록으로 쉽게 스테핑)
  • "뒤로 물러서"(모두 이동으로 부분적으로 필요 충족)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.