이전 버전의 FORTRAN에서 바이너리를 디버깅하는 방법은 무엇입니까? 돕다

이전 버전의 FORTRAN에서 바이너리를 디버깅하는 방법은 무엇입니까? 돕다

특정 회사의 이전 독점 FORTRAN 레거시 코드를 사용하고 있어(그래서 많은 소스 코드를 공개할 수 없음) 파일 상호 작용에 문제가 있습니다. 내 컴파일러 bash 쉘이 Install호출되고 make newspaperbash 쉘을 통해 일련의 다른 함수를 호출하여 makefile생성됩니다 newspaper. 그러나 출력 파일과 비교 하기 위해 입력 파일에서 호출된 newspaper다음 . 혹시 오류가 있는지 확인하기 위해 파일을 열어보았습니다 .Installnewspapernot foundnewspaper

텍스트로 변환을 시도했는데 newspaper숫자로 가득 찬 텍스트 파일이 생성되었습니다. 무엇이 잘못되었고 not found문제가 발생했는지 알아보려면 파일을 "코드"로 읽어야 합니다 .

명확히 하기 위해:

  • newspaper터미널에서 실행될 때 와 같은 바이너리 파일입니다. less newspaper내 Linux 운영자는 바이너리 파일이라고 말합니다.
  • newspaper내부 호출의 Install형식은 다음 newspaper < xfile1R.in > f1.test과 같습니다 .diff xfile1R.out f1.test > f1.dif
  • gfortran은 Ubuntu에서 사용되는 컴파일러이고 c 드라이브는 마운트 디스크입니다.
  • 리틀 엔디안은 사용되는 바이너리 형식을 기반으로 해야 합니다.이 웹사이트

나는 Linux와 FORTRAN에 관해서 멍청한 놈입니다. 나는 단지 초보적인 실수를 저지르고 있을 수도 있습니다. 어떤 조언이라도 대단히 감사하겠습니다. 이것이 Linux 문제인지 FORTRAN 문제인지 잘 모르겠습니다.

roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ sh ./Install.sh
cat makefile.sh >makefile
chmod a+x makefile
make: 'newspaper' is up to date.
./Install.sh: 10: newspaper: not found
./Install.sh: 12: newspaper: not found
./Install.sh: 14: newspaper: not found
./Install.sh: 16: newspaper: not found
./Install.sh: 18: newspaper: not found
./Install.sh: 20: newspaper: not found
 84 -rwxrwxrwx 1 roman roman  83071 Feb 17 16:08 f1.dif
152 -rwxrwxrwx 1 roman roman 153543 Feb 17 16:08 f2.dif
108 -rwxrwxrwx 1 roman roman 109718 Feb 17 16:08 f3.dif
232 -rwxrwxrwx 1 roman roman 236209 Feb 17 16:08 f4.dif
164 -rwxrwxrwx 1 roman roman 166612 Feb 17 16:08 f5.dif
 48 -rwxrwxrwx 1 roman roman  48898 Feb 17 16:08 f6.dif
./Install.sh: 31: Syntax error: newline unexpected

편집 1: file newspaper확인해 보세요PATH

roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ file newspaper
newspaper: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=8ac6de30da50639d7e3ea55a09416b049a5291c0, for GNU/Linux 3.2.0, not stripped

편집 2: 파일을 복구하시겠습니까?

#
# Makefile for newspaper
#

OBJF = \
    sfun1.o \
    sfun2.o \
    sfun3.o \
    sfun4.o \
    sfun5.o \
    sfun6.o \
    sfun7.o 


FLAGS = -O2 -static -std=legacy
COMP  = gfortran

newspaper: $(OBJF)
    $(COMP) $(FLAGS) -o newspaper $(OBJF)

.f.o:
    $(COMP) $(FLAGS) -c $< -o $*.o

편집 3: Install오류

#! /bin/csh -f

make flops

./newspaper < xfile1R.in > f1.test
diff xfile1R.out f1.test > f1.dif
./newspaper < xfile2R.in > f2.test
diff xfile2R.out f2.test > f2.dif
./newspaper < xfile3R.in > f3.test
diff xfile3R.out f3.test > f3.dif
./newspaper < xfile4R.in > f4.test
diff xfile4R.out f4.test > f4.dif
./newspaper < xfile5R.in > f5.test
diff xfile5R.out f5.test > f5.dif
./newspaper < xfile6.in > f6.test
diff xfile6.out f6.test > f6.dif

ls -als *.dif

# User input for directory to put executable
if ( $1 == '' ) then
   echo " "
   echo -n "Enter directory for executable file: "
   set Edir = $<
else
   set Edir = $1
endif

if ( $Edir != '' ) then
   mv newspaper $Edir
endif

편집 4: 더 많은 구문 오류, 동일한 오류

./Install.sh: 30: Syntax error: newline unexpected
roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ ./
-bash: ./: Is a directory
roman@DESKTOP-QKJTF3S:

편집 5: csh 확인

roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ sudo apt-get install csh
Reading package lists... Done
Building dependency tree
Reading state information... Done
csh is already the newest version (20110502-5).
0 upgraded, 0 newly installed, 0 to remove and 20 not upgraded.

편집 6: 성공! ! 초보자인 저를 안내해 주신 @steeldriver에게 감사드립니다.

164 -rwxrwxrwx 1 roman roman 164829 Feb 17 21:36 f1.dif
304 -rwxrwxrwx 1 roman roman 307257 Feb 17 21:36 f2.dif
216 -rwxrwxrwx 1 roman roman 217791 Feb 17 21:36 f3.dif
460 -rwxrwxrwx 1 roman roman 468651 Feb 17 21:36 f4.dif
324 -rwxrwxrwx 1 roman roman 331213 Feb 17 21:36 f5.dif
 96 -rwxrwxrwx 1 roman roman  96955 Feb 17 21:36 f6.dif

Enter directory for executable file: ./Outputs
roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/

답변1

성공적인 디버깅 후 makefile은 bash 셸 사용으로 인해 일부 편집이 필요하므로 대부분의 수정은 스크립트를 명시적으로 실행할 때 수행 됩니다 newspaper <input_file.in>...../newspaper <input_file.in>...sh잘못된이것이 작동하는 방식은 파일이 다른 쉘 컴파일러를 Install명시적으로 명시하기 때문에 이를 더 잘 실행하면 파일이 완전히 생성됩니다.cshInstall./Installnewspaper

관련 정보