2012-11-06 3 views
4

"perl -d"스위치를 사용하여 SuSe Linux에서 perl 프로그램을 디버깅했습니다.디버깅 중 변수 값 수정 perl 코드

디버깅하는 동안 프로그램이

XYZ variable is not set보고 된 방법은 디버거 내부 XYZ의 값을 설정할 수 있습니까?

다음은 디버거 내부에서 시도했지만 작동하지 않습니다.

set XYZ=ABC 
my $XYZ=ABC 
setenv XYZ ABC 

나는 이것에 약간의 구글을했다. 그러나 내가 원했던 것을 찾을 수 없었습니다.

+2

신고 한 프로그램 부분을 보여줄 수 있습니까? – choroba

+1

Perl은 해당 메시지를 내 보내지 않습니다. 실제로받은 메시지는 무엇입니까? – ikegami

+0

@ikegami : Perl이보고하지 않았습니다. 내 프로그램이보고되었습니다. ;-) –

답변

4

디버그 콘솔은 Perl 표현식을 사용하므로 문자열 인 경우 값을 인용해야합니다.

오류가 발생한 줄 앞에 프로그램을 옮겨야합니다 (디버거에서 중단 점을 보면 b <line>입니다). 그런 다음 값을 설정하십시오.

$XYZ = 'ABC' 

당신이

my $XYZ='ABC' 

를 사용하는 경우 : 당신은 ABC 시도 문자열에 $ XYZ를 설정하려고한다고 가정 http://obsidianrook.com/devnotes/talks/perl_debugger/

+0

고맙습니다. 그게 내 문제를 해결해 줬어. :) –

+0

@ 심바스크 : "Eclipse"디버거를 사용할 때 이렇게 할 수 있습니까? (Perl 플러그인 "EPIC")? –

+0

@HelenCraigman. 필자는 이클립스 디버거를 사용한 적이 없다.하지만 그렇게 할 수 없다면 확실히 빠를 것이다. Komodo 디버거에서이 작업을 수행 할 수 있기 때문에 이클립스가 확실히 할 수 있습니다. 줄 번호 (또는 그 근처)를 클릭하여 중단 점을 설정할 수 있습니다. 아래쪽 화살표가있는 단추를 사용하여 코드를 단계별로 실행할 수도 있습니다. 이것은 그래픽 디버거와 같습니다. Firebug의 JS 디버거. 이것을 확인하십시오 : http://www.ibm.com/developerworks/kr/opensource/tutorials/os-epic/ – simbabque

2

: 여기

> $XYZ='ABC' 

좋은 자원이다 현재 범위에서만 $ XYZ 변수를 정의합니다. 디버거에서 테스트 할 때 범위가 디버그 콘솔 외부로 확장되지 않는 것처럼 보입니다 (즉, 콘솔의 해당 행에서만 액세스 가능함). E.G.

DB<2> my $x = "hello"; print "$x" 
hello 
    DB<3> print $x 
Use of uninitialized value $x in print at (eval 8)[/usr/share/perl/5.12/perl5db.pl:638] line 2. 
+0

아주 좋은 예! – simbabque