본문 바로가기

Study/Debugging10

Crash 발생 프로그램의 dump 생성 방법(Dump없이 죽는 프로그램도 해당) - procdump 사용 개발된 프로그램이 Release되어 고객이나 일반 사용자에게 배포되어 사용하게 되면 정말 예상치 못한 일들이 상당히 발 생하게 된다. 그 중 랜덤하게 개발된 프로그램이 소리소문 없이 죽어버리는(?) 문제에 대해 최소한의 해결 실마리를 찾을 수 있는 방법에 대해 공유하고자 한다. 해당 문제가 재현이 잘되는 경우라면 당현이 개발자 PC에서 디버깅을 통해 문제를 찾고 수정할 수 있으나, 이러한 문제 들은 대부분 개발자 PC에서 잘 재현되지 않으며, 사용자 PC에서도 간혈적으로 발생하는 문제라면 더욱더 문제처리를 하기가 어려워진다. 로그를 통해 문제를 추적해 볼 수 있으나 이 또한 애매한 경우가 상당수다.. 물론 Release하는 프로그램이라면 당연히 프로그램내에 mini-dump정도는 생성하는 로직이 필수로 .. 2021. 1. 5.
Visual studio - 조건 브레이크를 통한 디버깅 방대한 양의 코드에서 Debuging을 진행할때 특정 변수의 메모리가 초기화 되거나 또는 특정 문자열이 바뀐다던지.. 아니면 std::map이나 std::vector의 사이즈가 변경된다던지.. 이런 유형의 버그를 찾기란 쉬운일이 아니다... 특정 변수에 대한 접근 코드가 많고 또 그것을 어떤 함수를 통해 포인터 반환값으로 그 포인터를 이용해 데이터를 변경 하고 있다거나.. 정말 미친듯한 멀티쓰레드에서의 접근 처리가 이뤄지고 있다면.. 그것이야 말로 지옥이 따로 없다. -_-; 또한 find all로 검색시 몇천, 몇만 라인이상의 검색결과가 나올때는 정말 우울하고, 직종 변경을 다시한번 생각하게 만든다. 하지만 걱정하지 마라 이런 부분에 관련하여 Visual studio에서는 특정 상황에 중단점(브레이크 .. 2020. 4. 21.
Windbg 원격 디버깅 방법 windbg를 통한 원격 디버깅 windbg를 통해 타 pc의 프로그램을 디버깅 하기 위한 방법 1. Target Pc(디버깅을 해야 하는 프로그램이 있는 PC)2. Debugger PC(원격지로 연결하여 실제 디버깅을 진행할 pc) 위와 같이라고 가정하고1, 2번에 해당하는 pc 모두 windbg를 설치한다.그리고 Target PC(1번에 해당하는 PC쪽)에 아래와 같이 인자를 넘겨 windbg를 실행한다.- 난 cmd창을 열엇서 windbg가 설치된 경로에가서 아래와 같이 인자를 넣고 실행 cmd>Windbg.exe -server tcp:port=12345위와 같이 windbg.exe에 인자를 넣고 실행하면 windbg가 구동된다.그다음 디버깅을 할 프로세스를 Attach를 하던지 아니면 구동된 wi.. 2014. 11. 3.
소프트웨어 브레이크 포인터와 하드웨어 브레이크 포인터 소프트웨어 브레이크 포인터? 소프트 웨어 브레이크 포인트는 응용 프로그램을 디버깅 할 때 가장 흔하게 자주 쓰는 브레이크 포인트이다. 사용자가 지정한 주소의 값을 프로세스 이미지에서 읽어 저장후 그 부분에 0xCC로 덮어 쒸운다. CPU가 명령어를 실행하다가 0xCC를 만나면 INT 3을 발생시키고, 운영체제는 디버거에게 디버깅 이벤트를 넘겨준당 디버거에서 이벤트를 처리하면(즉 다시 RUN하면) 백업해놨던 값을 다시 프로세스 이미지에 덮어씌우주고 디버그 중인 프로세스 실행을 재개한다~ (만약 소프트웨어 브포를 걸면 oxcc로 값이 바껴있으므로 CRC검사를 하면 디버깅중인지를 탐지 할수도 잇다.) 하드웨어 브레이크 포인트 CPU에는 디버그 레지스터가 존재한다. (DR0~ DR7까지 있음) DR0 ~ DR.. 2011. 9. 28.