2012-03-19 3 views
3

Linux Perl 코드를 실행/디버깅 할 수있는 EPIC 플러그인이있는 Eclipse GALILEO를 사용하고 있으며 디버깅 중에 문제가 발생합니다. 일반적으로 단계별 디버깅을 수행하고 특정 Perl 모듈이 사용되는 라인을 발견하면 "Step Into"를 클릭하면 모듈 파일을 볼 수 있으며 디버깅 화살표도 여기로 이동합니다. 이제는이 시나리오를 따르지 않는 특정 모듈이있는 것 같습니다. 대신, "Step Into"를 클릭하면 실행중인 프로세스가 백그라운드 어딘가에서 발생합니다. 나는 "Step Over"를 누를 수 있고 수행중인 코드의 결과를 볼 수는 있지만 파일 자체 나 화살표는 볼 수 없다는 것을 의미합니다.디버깅 도중 Eclipse가 Perl 모듈을 표시하지 않습니다 (EPIC 포함)

는 조금 더 명확한 코드의 다음 부분을 참조하십시오 만들려면 :

. 
. 
if (defined($sysname) && $sysname) 
{ 
$sys_manager->setup_from_name($sysname); 
$pf_manager->setup_from_name($sysname); 
} else { 
die "You must give either a --system parameter or an alias name."; 
     } 
} 
. 
. 

위의 부분은 내가 스텝 -을 수행 here

을 찾을 수있을 때까지 처음부터 코드 내가 $sys_manager->setup_from_name($sysname); 행에 도달 할 때까지 단계별 디버그를 수행합니다. 내가 도달하면, "Step Over"가 아닌 "Step Into"버튼을 클릭합니다. 그런 다음이 창이 열리면이 setup_from_name 메서드가있는 모듈로보기가 전환됩니다. 그러나 앞서 언급했듯이 "디버깅 화살표"는 사라집니다. 이 단계에서 "Step Over"버튼을 클릭하면 실행이 백그라운드에서 계속됩니다 (변수가 수정되는 것을 볼 수 있습니다). "Step Return"을 클릭하면 화살표가 다시 나타나고 보이는 코드를 통해 계속 진행됩니다.

또한이 특정 모듈은있는 그대로 제공되었으며 CPAN을 사용하여 설치되지 않았 음을 말씀드립니다.

folder A/ #General folder 
    folder B/ #Where the scripts which use the above mentioned modules are located 
    folder C/ #Where the modules are located 

내가 그것을 언급하시기 바랍니다 아니에요 내가 명확히한다면 내 질문하지만 충분히 분명하다 바랍니다 다음과 같이 그들을 사용하는 코드 패키지의 상대적인 위치입니다. 내가 디버그 과정에서 문제가있는 모듈에 도달했을 때 나는 EPIC "(실험) 디버거 콘솔"을 사용하도록 설정하고 오류가있는 것 같습니다

UPDATE가 나타납니다. 불행히도이 디버거 데이터를 읽고 이해할 수 없습니다.

S00000003$^AS00000002''NS00000003$^DS000000010NS00000003$^ES0000001b'No such file or directory'NS00000003$^FS000000012NS00000003$^HS00000003256NS00000003$^LS00000003 

전체 오류 메시지가 어쩌면이 일부 빛을 쏟아 것이 link

를 통해 사용할 수 있습니다 ..

UPDATE 나 '2 :이 오류는 부분적으로 아래에 붙여 매우 긴 메시지입니다 관련 모듈 경로가 Eclipse의 프로젝트 속성에 "Perl Include Path"에 있는지 확인하도록 제안되었습니다.하지만 불행히도 변경하지 않아도됩니다.

+0

일부보기 이것이 일어나는 코드. 우리가 [예기치 않은 행동을 재현 할 수 없으면] (http://www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow), 우리는 잘못된 것에 대해 짐작할 만하면됩니다. – daxim

+0

@ daxim 코드 예와 몇 가지 추가 정보가 추가되었습니다. –

답변

0

이 문제를 해결하는 방법을 알게되었습니다. 이 초기 문제의 링크로 연결된 코드에서 볼 수있어, 다음과 같은 라인이 : 없습니다 펄 모듈을 가리키는 컴파일 타임에 @ INC의 조작을 단순화하는 모듈이다

use lib '..'; 

기본 경로 (/usr/share/perl/5.10.1/)에 있습니다. 웬일인지,이 모듈은 달릴 수 있었지만 나는 그걸로 들어갈 수 없었다. 모듈 중 하나를 (/usr/share/perl/5.10.1/) 경로에 복사하면 디버그 중에 "단계별 실행"을 수행 할 수있었습니다.

유일한 문제는 /usr/share/perl/5.10.1/에없는 모듈을 디버그에 사용할 수있게 만드는 것입니다. 하지만 이것이 추가 질문을위한 주제라고 생각합니다.

+0

이 문제가 자주 발생하며 해결 방법을 모르겠습니다. "보이지 않는"모듈을 주 프로젝트 디렉토리에 복사하는 것은 좋은 해결책이 아니며, 어색한 해결 방법입니다. –

1

EPIC 플러그인이 해당 모듈을 찾을 수 없다고 생각합니다. 나는 여기서 짐작하고 있습니다 :

@INC를 올바르게 설정 했습니까?

http://www.epic-ide.org/guide/ch03s02.php

는 설치 PadWalker 모듈을 했습니까?

http://www.epic-ide.org/guide/ch02s09.php

는 PERLLIB/PERL5LIB의 ENV 변수를 확인/설정 했습니까?

+0

안녕하세요. 의견을 보내 주셔서 감사합니다. 것은 모듈의 나머지 (적어도 내가 함께 일해 왔던 것)가 실제로 예상대로 작동한다는 것입니다. EPIC이 디버깅하는 동안 관련 * .pm 파일을 건너 뛰는 것을 의미합니다. 경로 문제와 관련하여 귀하가 맞을 수도 있습니다. 내가 제공하고 업데이트 한 링크의 구성에 따라 확인하려고합니다. 다시 한 번 감사드립니다! –

+0

언급 한 사용자 가이드에 설명 된대로 "Perl include path"에 모듈 경로를 추가하려했지만 불행히도 도움이되지 않았습니다. 그러나 EPIC "디버거 콘솔 (실험적)"을 사용하려고했는데 관련성이있는 문제가있는 모듈에 도달 할 때 오류가있는 것으로 보입니다. 그것처럼 보인다 :'NS00000003 $^AS00000002''NS00000003 $^DS000000010NS00000003 $^ES0000001b '그런 파일이나 디렉토리가 없다'NS00000003 $^FS000000012NS00000003 $ ^'어쩌면 이것이 어떤 단서를 줄 수 있을까요? –

+0

어떻게 든 모듈 파일을 찾지 못했습니다. 이 모듈을 어떻게 호출하는지 확인하십시오. 다른 모듈과 어떻게 다른지 확인하십시오. use lib '/ somepath'가 있습니까? 아니면 FindBin을 사용하여 모듈을 찾거나 모듈을 찾기 위해 다른 방법을 사용하고 있습니까? – user1126070

2

상대 경로가 작동하도록 lib를 사용하려면 다음과 같이 Cwd.pm을 패치 (다시)합니다 ... chomp를 추가하십시오. 이


sub fast_abs_path { 
    local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage 
    my $cwd = getcwd(); 
    require File::Spec; 
    my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir); 

    # Detaint else we'll explode in taint mode. This is safe because 
    # we're not doing anything dangerous with it 
    ($path) = $path =~ /(.*)/s; 
    ($cwd) = $cwd =~ /(.*)/s; 

    chomp($path); # <<<-- added this chomp here 

    unless (-e $path) { 

어쩌면 더 EPIC 코드의 수정, fast_abs_path를 호출하기 전에 씹는하지만, 여분의 씹는 결코 아무것도 아파하지 ...

데이비드