Taking baby-developer steps

2022.01.24. 학습 log 본문

Logs/학습 log

2022.01.24. 학습 log

Surin Lee 2022. 1. 24. 13:18

오늘 목표

  • 디버거(lldb) 사용법 익히기 [->printf()문으로 메모리 주소 찍다가 지침]
  • gnlTest 테스터 Mandatory Part통과
    • SIGSEGV 잡기
    • KO 뜨는 케이스 잡기
    • get_next_line.c 메모리 누수 잡기

오늘 한일

 

  • get_next_line.c 메모리 누수 잡기 -> 메모리 누수는 다 잡았는데 할당한 메모리를 중복으로 free하는 구간이 있다. (pointer being freed was not allocated) ->LLDB 사용법 익혀서 메모리 누수 확인하려고 했는데, 결국 LLDB도 메모리 누수가 일어난 메모리 주소정도 알려주는거 같아서, 테스터에 나온 주소 및 printf()문으로 찍은 버퍼들 주소랑 비교해가면서 메모리 누수를 잡았다.

  • 디버거(lldb) 사용법 익히기 -> 야곰 닷넷 - LLDB 정복 / Breakpoint 만들기 부분 보는 중 ->image 부분은 아직 필요 없을 거 같아서 여기만 빼고 다 봄! 주요 기능은 breakpoint, stepping, expression인거 같다.

  • SIGSEGV 잡기
  • KO 뜨는 케이스 잡기

메모

  • 내일부턴 오늘 익힌 디버거(lldb)를 이용해서 sigsegv와 ko를 잡아봐야겠다. -> 사실 오늘 디버거를 학습하지 않고 printf()문 찍어서 찾았다면  오늘 gnl mandatory part를 통과 할 수 있었을지도 모르지만, 이번 한번 시간을 쏟고 내일부터 연습해 보면서, 앞으로 디버깅하는게 더 효율이 좋을 거 같다. -> 디버거를 잘 사용하면 다른 사람이 만든 테스터기도 필요 없지 않을까 하는 생각도 든다.
  • 정말 하루종일 과제만 했는데도 생각보다 하루에 할 수 있는 양이 많지 않다는 것이 확 와닿았다. 좀 더 효율성 있게, 하루에 할 수 있는 만큼을 잘 계획해서 전체 과제 진척도도 예상을 해보는 연습이 필요 할것 같다.
  • 메모리 누수 잡는건 키보드에 손을 대기 시작하니 생각보다 금방 됬다.(물론 그 전에 어디가 문제인지 생각해 보는 시간이 정말 오래 걸리긴했다. 나 혼자 본 시각이라 오래 걸린거 같다. 동료와 코드리뷰하는 것의 중요성이 팍 느껴졌다..(매번 동료가 옆에 있을 순 없으니, 또 혼자 하는 코드 리뷰 연습이라고 치자..!))
  • 메모리 누수는 다 잡았으니, 이제 하나로 만들었던 get_next_line 함수를 부분 함수로 나누고, 부분 함수들의 name으로 break포인트를 잡아서 SIGSEGV를 먼저 잡고, KO 케이스를 잡으면 될 것 같다. 
    • SIGSEGV : 현재 SIGSEGV가 나는 테스트 케이스들의 공통점은 파일의 끝(eof)직전에 개행문자'\n'가 온다는 공통점이 있다.
    • KO : 구현 때부터 우려했던 stdin에서 난다. stdin에서 eof(cntrl + d)를 어떻게 탐지할지가 계속 고민이다.
Comments