Shell 스크립트에 대한 질문이 좀 있습니다.

  • #316614
    shell script 121.***.5.91 2028

    안녕하세요, 

    쉘 스크립트때문에 질문이 있습니다.
    지금 제가 쓰는 코드의 소스 파일은 모듈로 구성된 여러 포트란 파일들과(*.f90), Makefile, input file인 config.in로 구성이 돼 있습니다. 실행시에는 command line 상에서 make을 실행하면 test.x 라는 실행파일을 만들고 이 파일을 실행하면 코드가 계산을 시작합니다.
    Makefile 에는 각종 명령어와 source file(*.f90)에 관련된 내용만 들어있는데 config.in 의 내용과 각 모듈이 어떤 순서로 읽혀지는지요? 
    더구나 소스 파일인 *.f90는 여러 모듈의 집합체로 단독으로 실행되는 파일이 아닌데 어떻게 코드가 움직이는지 궁금한데 이해하기 쉬운 설명 좀 부탁드립니다.
    • sdds 97.***.122.37

      무슨 소린지는 잘모르겠지만,

      메이크 파일을 실행하면 실행파일이 만들어지고.

      인풋파일은, 실행파일이 돌아가기 위해서는 꼭 입력해주어야 할 인풋 데이타값을 모아논 것이죠.

      각모듈은 메이크 파일로 컴파일할때, 라이브러리랑 컴파일에 필요한 모든 파일이 메이크파일에 으해 하나의 실행파일로 다 컴파일되어서 들어갈거고. 단독의 실행파일이 메이크파일에 의해 일단 만들어지는거죠.

      그다음에 실행파일을 실행하면 인풋파일이 들어가는거고. 말씀하신것에 이미 다 들어있는거 같은데?

      • 원글 121.***.5.91

        사실 제가 알고 싶은 것은 어떤 특정한 시뮬레이션에 어떤 모듈과 어떤 인풋 값이 어떤 순서로 사용되는가 하는 건데요, 그냥 소스파일을 보면 모듈이 너무 많아서 어떤게 필요한 건지 잘 모르겠더군요.

        실행파일이 만들어질때 필요한 모듈들이 (계산) 순서에 따라서 컴파일될거라고 생각은 합니다. 이 순서가 어떻게 되는지 알 수는 없는지요? 코드가 너무 방대해서 우선 필요한 부분만 집중적으로 이해해야 할 듯합니다.

        • dggs 71.***.3.214

          아주 원시적이지만 아주 기본적인 디버그 방법이 있쟎아요. 아주 짜증나는 방법인지는 모르겠지만, 또한 아주 확실한 방법이죠.

          각각의 모튤안에, 프린트 문을 심어놓으세요. 각각의 모듈이나 몇번째 라인이 프린트 되는지를 명시해서. 주요 모듈에만 이런걸 심어놓으면, 시간이 좀 걸리더라도, 어떤 순서로 모튤이 실행되는지는 파악이 가능하죠. 그리고 보통 큰 프로그램은 어딘가에 참고할 매뉴얼정도는 있지 않나요?
          보통 코드 자체가 아무리 방대해도, 이런식으로 내가 찾아가야할 모듈을 좁혀서 찾아가면, 가려워서 긁어주어야 할곳을 쉽게 찾아가실수 있을겁니다.

          • 원글 121.***.5.91

            그런 방법이 있었군요.
            메뉴얼은 있는데 별 도움이 안됩니다.
            이사람 저사람 대책없이 바꿔놓고 올려놓아서 물어보면 그 부분은 내가 한게 아니라서 잘 모르겠다라고 대답하죠.

    • . 64.***.249.9

      source code analyzer를 이용하시면 분석과 이해가 쉬우실 겁니다. 포트란의 경우 source insight와 같은 일반 프로그램이 아닌 포트란 전용 프로그램을 쓰셔야 할 것 같네요. 물론 공짜는 아니고 비용이 좀 들겁니다.

      • 원글 121.***.5.91

        그런게 있나요?
        그러면 변수들도 모두 정리돼서 나오는지요?
        변수가 너무 많고 설명이 안돼 있어서 코드를 이해하는데 정말 방해가 되더군요.
        한번 찾아보겠습니다.

    • crest 71.***.29.144

      gdb를 써보셨는지요.
      물론 소스 코드를 읽어나가는 게 제일 확실한 방법이지만, 시간이 좀 걸리기 때문에 compile시에 디버깅 tag를 (-g) 를 넣어 두면, ctag 나 etag을 통해 라이버리나 헤더파일 그리고 function을 쉽게 찾아 tracing할 수 있습니다.
      ctag + fortran으로 검색을 해보시면 좀 더 도움이 될만한 글들을 찾을 수 있을 겁니다.

      • 원글 121.***.5.91

        좋은 방법같습니다. 아직 gdb를 잘 모르지만 한번 해볼만한 방법 같네요.

    • block 101.***.149.235

      절데 딴지 아닙니다. 안타까움이 질문에서 베어나옵니다.
      꼭 그 코드를 이해하시고 싶으면 프로그램 전반에 대해서 먼저 배우시는게 좋을듯합니다.
      일이란 단계가 있는것인데 shell script와 compile language의 차이를 모르시는데 그 안에 있는 변수나 input file및 내용을 이해하겠다는 것 또한 무리라는 생각이 듭니다.

      Compile language에서 make file은 실행파일을 만들기 위해 각 file을 compile해서 object file을 만들고 link시켜 하나의 실행 파일을 만드는 일을 해줍니다. 실제 프로그램이 돌아가는 순서와는 전혀 상관이 없습니다. 이런이유로 make file을 분석하실 이유는 1%도 없으니 실행 flow를 알고 싶으면 그에 맞는 code를 분석하셔야 합니다. main()부터 따라가 보세요…

      • 원글 121.***.5.91

        네, 맞습니다. 일에는 순서가 있죠.

        사실 저는 프로그래밍이나 시뮬레이션이 전공이 아니고요, 이론 전공자입니다.
        시뮬레이션이 필요한데 공부를 하다보니 코드 자체를 변경해야할 필요가 점점 더 생기더군요.

        그냥 main()에서 시작하자니 Letter용지로 수만페이지나 되는걸 본다는건 무리같습니다. 변수도 너무 많은데 주석도 엉망이예요.

        시뮬레이션 데이타 분석 자체도 다른 언어로 코딩을 해야하고 이 결과를 분석하려면 이론을 적용해야하니… 1인 3역이 쉽지는 않네요.

        어디 학원같은데서 배울데가 없을까요? 지금은 졸업후 본의아니게 한국에 휴가중인데 한달여 정도 시간이 있습니다. 기본적인 쉘 스크립트 언어와 랭귀지는 아는데 이 둘을 응용해서 하는 실제 코딩 경험이 없어서인지 처음에는 인풋파일이 뭔지도 몰랐었습니다.

Cancel