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

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

그게 가능할까요?

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

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

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



답변

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

미카엘 메이어의 대답 이 더 이상 문제가 없다, 내 대답은 사용되지 않습니다 ( 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이 아님).


답변

이제 크롬 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입니다.


답변

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

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


답변

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

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

Chrome 디버거 변경 값

여기에 이미지 설명 입력


답변

그렇지 않은 것 같습니다.

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


답변

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


답변

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

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

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

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