2016-11-11 4 views
0

다음 코드에서이 경고를 디버깅하려고합니다.초기화되지 않은 값 사용

연결에 미숙 한 값 $의 aprs_position의 사용 (.) 또는/usr/local/bin/arsed 라인에 문자열이 오류 중 하나가에 있다는 것을 나타납니다 (207)

foreach my $ent (@upd_q) { 

    my $aprs_position = Ham::APRS::FAP::make_position(
     $ent->{'latitude'}, 
     $ent->{'longitude'}, 
     -1,  # speed 
     -1,  # course 
     -10000, # altitude 
     (defined $ent->{'symbol'}) ? $ent->{'symbol'} : '/[', # symbol 
     1,               # compression 
     0               # no ambiguity 
    );                

    print "$aprs_position\n"; 

    my $packet = sprintf('%s>APTR01:!%s', $ent->{'callsign'}, $aprs_position); 

    print "$packet\n"; 

    if ($aprs_enable == 1) { 

     my $ok = $is->sendline($packet); 

     if (! $ok) { 
      $is->disconnect(); 

값이 Ham::APRS::FAP::make_position에서 되돌아 오거나 구문 오류 일 수 있습니까?

이 디버깅을 시작하는 가장 좋은 방법은 무엇입니까?

+0

어떤 라인이 207입니까? – shawnhcorey

+0

@shawnhcorey : 코드 샘플 내에있는 경우에만 $ aprs_position \ n "'을 인쇄 할 수 있습니다. – Borodin

+0

@Borodin 아니요, 위의 코드에서 두 번 나타납니다. 오류를보고하는 행을 모른 채 해결할 수는 없습니다. – shawnhcorey

답변

2

구문 오류가 아닙니다 (코드가 실행되지 않으면 코드가 전혀 실행되지 않음). 따라서 Ham::APRS::FAP::make_position()으로 전화를 걸어 돌아 오는 것이 기대치에 미치지 못하는 것입니다.

the code for the subroutine을 보면, undef을 반환하는 몇 가지 사항을 볼 수 있지만 작성자는 분명히 잘못된 것을 알려주는 경고를 표시하는 것을 믿지 않습니다.

나인 경우 디버거를 사용하여 해당 서브 루틴의 실행을 추적하여 잘못 된 부분을 확인합니다. 나는 그 코드에서 $symbols을 다루는 것으로 의심하지만, 당신이 거기서 지나가고있는 가치가 무엇인지 모르겠습니다.

또한 변수를 설정해야하는 줄 다음에 이와 같은 내용을 추가 할 것입니다.

die 'Undefined value for $aprs_position' unless defined $aprs_position; 
+1

@AndyK : 가능합니다. 본질적으로 함수 호출에 대한 매개 변수 중 하나는 범위를 벗어 났으므로 어느 것을 쉽게 알 수있는 방법이 없습니다. 디버거에 익숙하지 않다면 일련의'print' 문을 추가하여'make_position'에 전달할 값을 보여줄 수 있습니다. (아주 이상하게 쓰여진 모듈입니다.) – Borodin

관련 문제