개발/Unix

[Solaris] Solaris에서 c프로그램 다운/%s에 NUL

승리승리 2021. 5. 2. 18:27

#목적

   1. Solaris환경에서 WAS Down현상이 발생하였다.
   2. java/native를 이용한 라이브러리가 배포되는 WAS 기동 방식이다.
   3. 위 현상에 대해 분석 및 발견한 기술 및 내용에 대해서 작성한다.

 

#내용

   1. Log확인
      a. WAS Down현상이 발생한 환경의 Log를 확인해보니 별다른 특이점을 찾을 수 없었다.
      b. 각 Log를 모아놓고 Linux환경, Windows환경에서의 Log와 비교
      c. Linux와 WIndows환경의 Log는 x = (null) 와 같은 형식의 문자열을 출력
      d. Log의 null값을 출력하는 부분을 주석처리 후 Solaris 환경에 배포 및 실행 시 WAS Down현상 미발생
      e. %s에 NULL을 전달하는 부분이 문제의 원인임을 파악

   2. Solaris환경의 %s와 NULL
      a. 본래 c/c++에서 %s에 NULL이 오면 안된다. Solaris가 올바르게 동작하는 것이며 다른 OS의 경우 이를 null값으로 출력해줄 뿐이다.
         i. Solaris11에서 segfaulting을 방지하기 위한 검사를 추가하였다. 그러나 그 이전 버전에서는 문제가 발생할 것이다.
https://stackoverflow.com/questions/16395638/in-solaris-vsnprintf-core-dump-in-strlen-function-is-any-method-to-resolve-this
     b. 작업 내용에 대한 중주제
         i. 작업 내용에 대한 소주제

 

#배운점

   1. 이번에 native를 사용하며 경험하게 된 부분이다. java나 go 등 다른 언어에서는 이러한 문제가 발생하지 않을 수도 있다. 하지만 그것은 해당 OS 및 환경으로 인한 문제 미발생일 수 있음을 인지하게 되었다.

이에 추후 변수 및 값 사용시 조금 더 꼼꼼하게 체크하는 습관을 들이도록 해야겠다.
   2. NULL에 대한 출력이 필요하다면 문자열로 표현하도록 한다.

'개발 > Unix' 카테고리의 다른 글

[Linux] DISK용량  (0) 2020.10.03
[Linux] 압축  (0) 2020.09.22
[Linux] 포트열기(Port Open)  (0) 2020.09.22
[Linux] ip조회  (0) 2020.09.20
[Linux] Windows에서 Linux로 파일 및 폴더 옮기기  (0) 2020.09.19