dbx 실행 중, 프로그램 이상 종료 문제
고수님들께 질문 좀 드리겠습니다.
C++ 프로그램에서 소스 a.C의 함수가 소스 b.C의 함수를 호출하는 구조를 가지고 있습니다.
이 프로그램을 dbx로 디버깅하는 중에 s 커맨드로 b.C의 모듈로 들어가려고 하면,
항상 프로그램이 멈추게 되는데요.
(에러 원인이 확실히 기억이 나지 않지만, 세그먼테이션 폴트였던 것도 같은데.. 지금 회사가 아니라서)
dbx에서 s명령으로 b.C의 모듈로 들어가지 않고, next명령을 실행하면 프로그램이 멈추는 일은
절대 없습니다. 몇 번이고 반복하면서 확인을 했기 때문에, 어쩌다가 그런 건 아닌 것 같구요.
b.C라는 소스는 원래 다른 쪽에서 사용 중이던 프로그램이었기 때문에,
호출 인터페이스 부분만 살짝 바꿔서 사용하려고 하는데,
컴파일/링크 모두 이상없이 잘 실행됩니다.
그런데 디버깅 때문에 step명령으로 모듈 내부로 들어가려고 하면 꼭 프로그램이 멈춰서
낭패이네요.
한가지 알아낸 것이 있기는 합니다만,
소스 에서 특정 함수를 제거하고 컴파일을 하면
위와 같은 문제가 말끔히 없어집니다.
문제의 함수는 다음과 같습니다.
(소스를 못 가져와서 100% 정확하다고는 장담 못하지만, 짧기도 하고 해서 기억상으로는 맞지 않을까.)
double Dbl(string str)
{
double d;
stringstream s;
s << str.c_str();
s >> d; // (1)
return d;
}
위 소스에서 (1)부분을 삭제하면, 프로그램이 멈추는 현상이 없어지더군요.
현 시스템의 타 프로그램에서 잘 사용하고 있는 소스의 일부분인데,
왜 이런 현상이 나타나는지 모르겠습니다.
다만, 이번에 컴파일러 버전이 6.0에서 9.0으로 업그레이드 되긴 했는데
그게 문제일까요?
C++에 문외한이라서 원인이 뭐고 어떻게 수정해야 할 지도 모르겠네요.
환경은 아래와 같습니다.
# OS : AIX 5(?)
# DB : DB2 8.2.5
# 컴파일러 : XLC 9.0 (컴파일 모드 : 64bit)
혹시 이런 경험 갖고 계신 분, 정보 공유해 주시면 정말 감사하겠습니다.
긴 글 읽어주셔서 감사합니다.
댓글 달기