Google 크롬에서 디버깅하는 동안 자바 스크립트 변수 값을 변경할 수 있습니까?


81

Chrome 개발 도구를 사용하여 자바 스크립트 앱을 디버깅 중이며 코드를 단계별로 실행하는 동안 일부 변수 값을 변경하고 싶습니다.

그게 가능할까요?

나는 시도하고 다음과 같은 것을 얻었습니다.

> modeline
1
> modeline=0
0             <<< seems to work but... 
> modeline
1             <<< ups!!

하지만 무엇을 할 수 있는지 또는 할 수 없는지에 대한 문서를 찾을 수 없습니다.


코드를 게시하십시오. 어디 modeline에서 오는가?
Emil Ivanov 2011 년

4
@Emil : 그게 중요한가요? modeline은 전역 변수이며 동일한 결과로 window.modeline을 사용하여 수정하려고 시도했습니다. 그러나이 질문은 함수 내에서 선언 된 지역 변수와도 관련이 있습니다
tato

4
이 동작을 확인할 수 있습니다. Chrome에서 JS 객체의 속성을 수정해도 인터프리터에서 객체의 실제 값에 영향을 미치지 않는 것 같습니다. Firefox에서 동일한 수정으로 js 스크립트가 예상대로 다르게 평가됩니다. Chrome peraps의 일종의 exstra 보안? 누구든지 Chrome에서 켤 수 있는지 알고 있으므로 js 디버깅에 사용할 수 있습니까?
Nikolaj Hansen

1
이에 대한 버그 보고서제출 했습니다.
GreenGiant

1
V8에서 이미 구현 됨 : 문제 2399 이제 Chromium의 개발자 도구를 업데이트해야합니다. 문제 124206
gabrielmaldi

답변:


39

이 답변이 여전히 찬성 투표를받는 이유는 무엇입니까?

미카엘 메이어의 대답 이 더 이상 문제가 없다, 내 대답은 사용되지 않습니다 ( go()지금 반환 30콘솔과 일 처리 후). 위의 gabrielmaldi의 의견 에 링크 된 버그 보고서 에 따르면이 문제는 2013 년 7 월에 수정되었습니다 . 내가 여전히 찬성 투표를 받고 있다는 사실이 놀랍습니다. 찬성자가 질문이나 답변을 이해하지 못한다고 생각하게 만듭니다.

나는 역사적인 이유로 여기에 원래 대답을 남겨 둘 것이지만 대신 Mikaël의 대답에 찬성 투표하십시오 .


트릭은 지역 변수를 직접 변경할 수는 없지만 객체의 속성은 수정할 수 있다는 것입니다. 전역 변수의 값을 수정할 수도 있습니다.

var g_n = 0;
function go()
{
    var n = 0;
    var o = { n: 0 };
    return g_n + n + o.n;  // breakpoint here
}

콘솔:

> g_n = 10
  10
> g_n
  10
> n = 10
  10
> n
  0
> o.n = 10
  10
> o.n
  10

go()중단 점을 설정하고 콘솔에서 해당 호출을 실행 한 후의 결과를 확인하면 결과 가 0이 아니라 20이라는 것을 알 수 있습니다 (슬프게도 30이 아님).


2016/01/19 Chrome 최신, 사소한 코드 (var a = 1; debugger; console.log (a);) 버그가 여전히 존재합니다 ...
Offirmo

@Offirmo- 1기록됩니다. 버그는 무엇입니까? 무엇이 기록 될 것으로 예상 했습니까?
gilly3

디버거가 열린 상태 a에서 "범위"패널에서 값 (예 : 42)을 변경 한 다음 다시 시작합니다. 1이 기록됩니다.
Offirmo

@Offirmo-나에게 적합하지 않음 : 스크린 샷 . 하지만 함수로 래핑하면 설명하는 내용을 볼 수 있습니다. 흥미 롭군. 하지만 콘솔에 직접 입력하여 값을 변경할 수 있습니다 (개인적으로 스코프 패널을 사용하는 것보다 더 쉽습니다). 스크린 샷 스코프 패널에서 값을 변경해 본 적이없는 것 같습니다. 나는 항상 콘솔에서 값을 변경하는 표현식을 실행하기 만하면됩니다.
gilly3

4
당신의 대답은 모든 기준에 부합하기 때문에 나는 upvoted "좋은 대답을" 수락 된 대답에서 오는 - - 그것에게 인스턴트 신뢰성을 제공합니다 당신이 새로운, 더 나은 정보를 제공하는 다른 대답을 언급. 감사합니다. 그리고 upvotes를 즐기십시오!
gfullam dec

67

이제 크롬 35에서 가능합니다 (2014 년 7 월 11 일 현재). 그래도 어떤 버전이 먼저 허용되었는지 모르겠습니다.

내 컴퓨터에서 @ gilly3 예제를 테스트했으며 작동합니다.

  • 콘솔을 열고 SourcesSnippets에서 새 스 니펫을 추가하고 다음 코드를 붙여 넣습니다.

    var g_n = 0; function go() { var n = 0; var o = { n: 0 }; return g_n + n + o.n; // breakpoint here }

  • 스 니펫 이름을 마우스 오른쪽 버튼으로 클릭하고 '실행'을 클릭합니다 (하지만 함수가 실행되지는 않음).

  • return 문에 중단 점을 추가합니다.
  • 아래 콘솔에 다음을 입력하십시오. go()
  • 아래에 설명 된대로 변수 값을 변경합니다.

로컬 수정이 허용 된 기능.

반환 된 결과 g_n + n + o.n는 30입니다.


1
이 버그의 회귀는 Brian의 답변에 제공된 링크 에서 추적됩니다 .
Mike

7

다음은 Chrome 개발자 도구에서 알려진 버그입니다.

http://code.google.com/p/chromium/issues/detail?id=124206


2013 년 3 월 21 일에 수정 된 것 같습니다. 어떤 버전의 크롬이 될지 어떻게 알 수 있는지 모르겠습니다.
David

@David 그들은 Blink에서 수정했습니다. Blink를 사용하는 Chrome 빌드를 얻기 위해 잠시 기다려야 할 수도 있습니다
Anshul

3
Chrome 버전 49.0.2623.87에서 (다시) 깨졌습니다. 중요도를 높이려면 위 링크에 로그인하고 문제에 별표를 표시하세요.
Mike

6

예! 드디어! 방금 Mac에서 Chrome 버전 66.0.3359.170 (공식 빌드) (64 비트)로 시도했습니다.

첫 번째 그림에서와 같이 범위의 값을 변경하거나 두 번째 그림에서와 같이 콘솔을 사용하여 값을 변경할 수 있습니다.

Chrome 디버거 변경 값

여기에 이미지 설명 입력


복잡한 상황 (예 : 간격 및 트리거)에서도 작동하는 것 같습니다.
Gerfried

4

그렇지 않은 것 같습니다.

중단 점을 입력하고 중지되면 콘솔로 전환하고 변수를 설정하십시오. 다른 값을 할당해도 오류가 발생하지 않지만 할당 후 읽은 경우 수정되지 않습니다. :-/


좋아 ... 적어도 당신은 내가 보는 것과 같은 행동을보고 있습니다. 하지만 ... 가능할까요?
tato 2011 년

4

Firebug는 그렇게 할 수있는 것 같습니다.


3
IE와 Opera Dragonfly도 마찬가지입니다.
Keith K

5
나는 정말 오페라 잠자리가 그립다 -____-
ThorSummoner

2

실제로 해결 방법이 있습니다. 전체 메소드를 복사하고 이름을 수정하십시오. 예를 들어 originalName ()을 originalName2 ()로 수정하되 원하는 값을 취하도록 내부 변수를 수정하거나 매개 변수로 전달하십시오.

그런 다음 콘솔에서 직접이 메서드를 호출하면 동일한 기능을 갖지만 변수 값을 수정할 수 있습니다.

메서드가 자동으로 호출되면 대신 콘솔에 입력하십시오.

originalName = null;
function originalName(original params..)
{
    alert("modified internals");
    add whatever original code you want
}

2

콘솔에서 할당하여 스크립트 변수 값을 수정할 수 있습니다. 가장 간단 해 보입니다.


1

크롬 팀이 왜이 어리석은 기능을 허용하지 않는지 모르겠지만 성공으로 변수 값을 변경할 수있는 유일한 방법은 "소스"탭 아래의 크롬 편집기에서 스크립트를 직접 수정하는 것입니다 (이로 인해 페이지를 새로 고칠 때까지 스크립트), 새로 고칠 때 변경 사항이 손실되므로주의하십시오.


0

동일한 문제가 발생하여 'Google 크롬 정보'-> 도움말로 이동하여 최신 업데이트를 받으려면 브라우저를 다시 시작해야한다고 표시했습니다.

이렇게했는데 갑자기 지역 변수를 변경할 수 있습니다. 범위 변수 창에서 편집 할 변수를 클릭하고 새 값을 입력하기 만하면됩니다.

그래도 오른쪽 창 (범위 변수)의 텍스트를 변경하기 전에 관련없는 var 할당을 건너 뛰어야한다는 이상한 점을 발견했습니다.


로컬 저장소를 사용하여 속성을 저장 한 경우 Resources-> LocalStorage로 이동하여 여기에 직접 저장 한 속성을 편집 할 수도 있습니다.
GilesDMiddleton 2013 년

0

실행 흐름을 중단하지 않고 코드 블록이 실행될 때마다 값을 수정하려면 다음을 수행하십시오 .

디버거의 "로그 포인트"기능은 중단없이 임의의 값을 콘솔에 기록 할 수 있도록 설계되었습니다. 실행 흐름 내에서 코드를 평가하므로 실제로이를 사용하여 중단없이 즉시 값을 변경할 수 있습니다.

줄 번호를 마우스 오른쪽 버튼으로 클릭하고 "Logpoint"를 선택한 다음 할당 표현식을 입력합니다. 다음과 같이 보입니다.

여기에 이미지 설명 입력

디버그 라인으로 프로젝트를 다시 빌드 할 필요없이 재현하기 쉽지 않은 상태로 값을 설정하는 데 매우 유용합니다. 완료되면 중단 점을 삭제하는 것을 잊지 마십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.