본문 바로가기

컴퓨터/디버깅32

함수 포인터가 boolean 으로 출력된 경우 이번 에러는... 뭔가 논리적으로 원인을 찾아 가기 힘든 경우였는데, 이런 상황을 알고 있다면 후에 이런 상황을 맞딱뜨렸을 때 이와 같은 원인 역시 고려할 수 있을 것이다. 결론적으로 얘기하자면, std::cout 으로 함수 포인터를 출력할 경우 boolean 으로 형변환되어 1 이 출력된다. 만약 함수의 출력값이 엉뚱하게도 계속 1 로 나온다면 이와 같은 원인 때문일 수 있다. 문제는 다음과 같은 함수를 출력하는 상황에서 발생했다. 문제가 생겼던 부분은 아래 쪽 코드인 make_stat_page.cpp 에서 130 번째 줄이다. 확인차 131번 줄도 만든 것인데, 여하튼 저렇게 했기 때문에 get_current_time 함수의 원본인 위쪽 코드의 내용에도 불구하고 계속 1 만 출력이 되었다. 그것은 곧.. 2014. 12. 1.
긴 오류 메세지 알아 보기 STL 을 사용하다 보면 특히나 오류 메세지가 매우 길어질 때가 자주 있다. 길어진 이유를 찬찬히 뜯어 보면 별 내용은 없고 대부분 STL 의 container 의 형 선언 때문인데, 보통 사용할 때는 기본값(default 값)으로 되어 있는 것을 사용하기 때문에 명시적으로 코드에 적어 주지 않는 것들이 오류 메세지에는 전부 나오기 때문에 길어지곤 한다. 이러한 것들을 무시하고 오류 메세지를 읽으면 좀 더 빨리 오류 메세지의 의미를 알 수 있다. 혹은, 오류 메세지의 제일 끝부터 읽으면 된다. 예를 들면 다음과 같다. [adnoctum@nomadism analysis_code]$ makeg++ -c check_data_set_consistency_with_gene_rank.cppcheck_data_set.. 2013. 5. 22.
오랜 시행 후 프로그램이 멈추는 경우 - GDI 문제 다음과 같은 에러가 있다는 연락을 받았다. 1,2,3 trials을 한 번에 시행할 경우 중간에 멈추는 버그 발생 환경 : Visual Studio 2010 on Windows 7 Professional SP1, English, 64-bit. 각 trial 은 대략 50~60개의 이미지를 보여주고 환자의 입력을 받는 것인데, 각 이미지 사이에 무반응자극 이미지를 한 장씩 보여 주게 되어 있다. 이런 상황에서 위와 같은 에러가 발생했다는 것은 대략 GDI 에 관련한 문제임을 직감할 수 있다. 따라서 디버깅을 하기 위해 작업관리자에서 GDI Objects 의 개수를 보여 주는 컬럼을 켠 상태에서 프로그램을 실행시켰다. 역시나, 객체 수가 계속 올라 간다. 즉, 문제는, GDI 객체가 제대로 해제되지 않아서 .. 2013. 1. 1.
STL의 set 의 iterator 와 const_iterator에 따른 오류 다음과 같은 오류가 났다. cluster_gene_by_robust_region.cpp:99: error: passing ‘const CRobust_Position’ as ‘this’ argument of ‘void CRobust_Position::inc_gene_count(const int&)’ discards qualifiers환경: GCC 4.4.6 on CentOS 6.3 (Kernel Linux 2.6.32-279.14.1.el6.x86_64) 그 쉽다는 컴파일 에러인데 쉽사리 이해가 되지 않는다. 에러 내용 자체는 const CRobust_Position 을 this 로 void CRobust_Position::inc_gene_count 함수로 넘기면 qualifier 를 버리게 되기 때문에 .. 2012. 12. 6.