2012-12-08 6 views
3

이제 버그가 있다는 것을 이미 알고 있습니다.하지만 찾을 수 없습니다. 내 코드를 검토하고 잘못된 점을 발견하는 데 도움을 줄 수 있습니까? 오류 메시지는 내가 만든 날짜 함수를 중심으로 회전합니다. 다른 모든 함수는이 코드에서 잘 작동합니다.유닉스 쉘 스크립트의 세그먼트 오류 (코어 덤프) 오류. 버그를 찾는 데 도움이됩니까?

오류 :

[email protected]:~$ ./finalproject.sh -d 
Segmentation fault (core dumped) 

코드 : 귀하의 date 기능은 실수로 자신을 호출

function check 
{ 
     echo "usage: hw14.sh option argument 
Please enter one or more options or arguments." 
     exit 
} 
function date 
{ 
     if [[ $myvar == "-d" ]] 
     then date "+%d %B,%Y" 
     fi 
} 
function host 
{ 
     if [[ $myvar == "-h" ]] 
     then hostname 
     fi 
} 
function who 
{ 
     if [[ $myvar == "-w" ]] 
     then whoami 
     fi 
} 
function help 
{ 
     if [[ $myvar == "-help" ]] 
     then echo " 
valid options: 
-d = display today's date in day-month-year format 
-h = display name of computer you are currently working on 
-w = display who you are logged in as 
arguments: 
Any argument entered is checked to see if it is a file name 
" 
     fi 
} 
if [ $# -le 0 ] 
then check 
fi 
for myvar 
do 
     if [[ $myvar == "-"* ]] 
     then date; host; who; help 
     fi 
done 
+0

너희들이 말한 것을 살펴본 후에, 나는 방금 내 기능의 이름을 바꾸었다. 도움을위한 탱크. – user1852516

+0

gdb를 코어 덤프에서 항상 실행하여 프로그램이 충돌하는 곳을 정확히 찾을 수 있습니다 ...이 경우 행복하게 gdb가 필요하지 않습니다. –

답변

2

. 충돌을 피하기 위해 함수의 이름을 바꾸거나 시스템 명령을 더 구체적으로 /bin/date으로 참조하십시오.

+1

또는'PATH'에서 찾은 명령을 쉘이 사용하게하려면'date' 대신'command date'를 호출하십시오. –

3

date 함수는 종료 조건없이 반복적으로 호출합니다. Bash의 probably always segfault입니다. 함수 대신 date 명령을 호출하려면 command date을 사용하십시오. bash 4.2에서 이러한 오류를 감지하는 데 도움이되도록 FUNCNEST 변수를 설정하여 재귀 깊이 제한을 설정할 수도 있습니다.

+1

+1 정보 링크 – msw

관련 문제