산들바람_
2k
2020-03-25 21:08:35
22
1495

가장 무식한 디버깅 방법


저는 프로그램 개발을 하면서

데드락 같은 자가당착에 빠질때면

디버깅을 시작합니다.

물론 브레이크 포인트를 잡아서 변수값을 확인하고 재개 하는 유능하신 개발자분이 많으시지만..

전 넘 무식해서 로그를 찍으면서 추적해 나가는 방식을 아직도 쓰고 있습니다

한땀 한땀이죠 ㅠ

그렇게 하나씩 발견해 나가면서 ,,, 아무리 어려운 숙제도 결국 풀리게 되는데요..

너무 툴에 무지하면서 무식한 저지만

역시 원시인은 그저 손맛에 의존하는게 편해진건지 한계인지..

그렇게 범인을 색출하고 있습니다 ㅠ

0
1
  • 댓글 22

  • RedVelvet
    125
    2020-03-25 21:39:19

    저도 평소에는 Break Point를 걸고

    디버그 모드에서 디버깅을 하지만

    막상 마음이 급하면 log.debug("어쩌구");

    이런식으로 하곤 합니다.

    급하면 단순한 버그도 잘 보이지가 않아서요...

    0
  • pooq
    4k
    2020-03-25 21:40:41

    개발자들 편하라고 IDE에 디버깅 툴을 만들어 넣어둔건데 무식하게 콘솔에 찍어가며 디버깅하는게 자랑은 아니죠.

    0
  • kenu
    48k
    2020-03-25 21:46:11

    console.log()

    없으면 전 웁니다.

    4
  • 캐츠비
    917
    2020-03-25 22:28:50

     대기업 폐쇄망에서 디버깅할떄 IDE없어서 vm으로 코드 하나하나 라인마다 print찍어가면서


    디버그했었죠 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    0
  • 안뇽후후
    125
    2020-03-25 23:26:22
    간헐뻐그잡을땐 printf 신공도 필요하죠 .....

    0
  • 카시와기유키
    185
    2020-03-25 23:36:02

    전 지금까지 console.log() 로 해왔는데요..

    dev_tool 이 있는 건 어렴풋이 알고 있지만 사실 어떻게 쓰는지 몰라서 안 써왔네요 ㅋㅋ

    console 로도 생각한 부분에 찍어보고 나오는 결과를 추론하면서 잘 해오고 있는 것 같아요 아직까지는...

    0
  • 앙앙이
    4k
    2020-03-25 23:49:23

    저두 로그를 이용한 디버그족입니다.


    그런데 꼭 로그를 이용한 디버그를 한다면 저급한 수준으로 보시는 분들이 계십니다.

    어찌되었든 논란이 여지가 있기에 심리적으로 위축되는것이 사실입니다.

    하지만 로그를 이용한 디버깅이 단위 테스트 모듈을 이용한 검증으로 바뀐 순간부터

    로그를 이용한 디버깅이 밑거름 되었기에 단위 테스트 모듈로의 이동이 자연스럽게 되었다고 생각합니다.

    이제는 IDE 디버깅 이용하는 분들 보면 아직도 휘발성을 갖는 디버깅에 의존하시나 합니다.


    단위 테스트 역시 만능은 아닙니다. 단위 테스트에 대한 비용때문에 효율성을 따져 전체가 아닌 중요도가 높은것들만 할 수 밖에 없지요. 특히 디버깅 이용하면 이 비용을 줄일 수 있기때문에 병행이 필요합니다.

    세상사 둥글기때문에 휘발성 갖는 디버깅을 최고로 여기는 분들한테도 말조심할 필용성을 강하게 느끼고 있지만 그분들도 세상 둥글다는것 아셨으면 합니다.

    6
  • devcrema
    712
    2020-03-26 00:09:42

    앙앙이

    테스트의 휘발성 비휘발성에 대한 부분은 생각지도 못한 부분이네요!

    생각해보니 로그 또한 어느정도 유의미한 부분은 디버그로그를 남기며 비휘발성으로 주석과 유사한 느낌으로 두는 것도 좋아보이네요. 의외로 로그를 남겼어야하는데 놓치는 부분들도 종종 있으니까요.
    가장 깔끔한건 문제를 해결하는 단위 테스트를 작성하는 것이겠지만요.

    0
  • 세브라이드
    1k
    2020-03-26 00:24:07

    @앙앙이 휘발성이라는 관점에서 단위 테스트 모듈을 바라볼 생각을 못했네요... 뭔가 좋은 깨달음을 주셔서 감사합니다!

    0
  • 하두
    11k
    2020-03-26 06:44:47

    첫번째는 직감

    두번째는 범위좁히기

    로 합니다.

    0
  • 재현아빠
    2k
    2020-03-26 08:33:19

    저도 전 회사에서는 사용하는 IDE 디버깅에 오류가 많아 그냥 로그찍어서 해결했습니다.

    자기에게 가장 편한 방법을 사용하면 되는거지, 꼭 그걸 가지고 뭐라하는 사람들이 있다니까요..

    3
  • 근원으로
    389
    2020-03-26 08:39:29 작성 2020-03-26 08:40:23 수정됨

    위에서 다른 분이 말씀하셨지만,

    범위를 좁히고 문제 영역을 빠르게 파악하는 

    부분에서 로그는 상당히 뛰어난 툴입니다.

    디버깅 툴도 좋지만, 대부분은 로그로도 빠르게

    해결 됩니다.

    0
  • ercnam
    3k
    2020-03-26 09:11:23

    투자대비 수익(?)이 좋은게 로그죠. System.out.println 한줄이면 뙇 하고 나오니

    다만 좀더 디테일한 정보는 역시 IDE 디버깅으로 볼수있지 않나 싶습니다

    얼마전에 서비스에서 DB쿼리해서 받아오는 라인이 자꾸 널 익셉션 뜨는데

    정작 쿼리 자체는 정상이라서 어디가 문제인지 몰랐는데

    IDE 디버깅을 해보니 서비스객체 자체가 null 찍혀서 익셉션이 터지는 거였더군요.

    뭐 객체 자체가 널 떠버리는 경우를 전 흔치않게 봐서 적응이 안된것도 있었지만...

    암튼 말하고자 하는건 로그 찍는걸로는 보기 힘든 정보를 IDE 디버깅으로 볼수 있다는거..

    0
  • 타락한마음
    555
    2020-03-26 09:31:37

    이클립스는 디버깅하기 너무 불편하더군요. 이해합니다.

    비주얼스튜디오의 반만이라도 따라갔으면 합니다. 

    0
  • 배고파서서러워요
    2k
    2020-03-26 10:50:57

    저도 로그 찍는데요(.....)

    IDE를 못믿어서가 아니라, 시간은 없는데 정보가 너무 많아서, 정보 추릴려고 제가 원하는 포인트에 익셉션 로그 따로 찍습니다....

    개발 환경만 받쳐주면 TDD건, 리펙토링이건 뭐건 안하겠습니까.....

    0
  • 이설란
    3k
    2020-03-26 11:26:39

    개발환경에 따라 다르게 사용하고 있어요.

    log4, system.out.println, console.log, breakPoiint 상황에 따라서 사용해요.


    개발을 처음할 때 아!! 에러를봐도 뭐라그러는지 알아야지...(당시는 그랬어요.)

    그래서 그냥 코드마다 system.out.println 로 값을 찍었어요.


    그러다가 비쥬얼스튜디오를 만나서 디버그 모드를 사용했어요.

    와우!!! 이런 신세계가~ 완전 좋아!!! 


    다시 이클립스의 세계로 왔는데...그땐 디버그 기능이 그리 좋지 않다고 생각해요. (제가 몰라서...)

    근데 이클립스에서도 디버그 모드를 사용해보니 올~ 좋은데? 이정도면 나쁘지 않아!!


    그와중에 웹에서도 개발자 모드드에서 소스 디버깅이 되네. 와!! 세상이 너무 좋진거 아냐?

    내가 그동안 이런 기능을 모르고 있었다니....좋아좋아!!!


    그러다 다시!! 로컬은 사용도 못하고...가상코딩해서 개발서버에 올려놓고 개발해야하는데...

    아니왜 로그를 볼 권한을 안주는거야!! 젠장!!! 운영담당자에게가서..빌자!!!

    "저...죄송한데 로그파일을 얻을 수 있을까요?" -> 자주물어본다!! -> 결국 권한을 얻어낸다!!!

    돌아왔다!!! 나의 system.out.prinln


    개인적으로는 디버깅 모드를 많이 사용하긴 해요. 나중에 라인 삭제 하기도 좀 귀찮고

    F6 혹은 F10으로 하나 하나 넘기면서 어느코드에서 에러가 나는지 바로바로 알 수 있으니까요.

    그렇다고 다른쪽을 뭐라하는건 아닙니다. 이런건 개인취향이니까요. 개발만 정해진 기간안에

    한다면 뭐가 문제겠습니까? 뭐든 오케이입니다!!

    0
  • 지붕뚫고높이차
    766
    2020-03-26 11:30:54 작성 2020-03-26 11:34:39 수정됨
    정리된 로그를 보는 디버깅하고
    브레이크 포인트와 인스펙터를 사용하는 IDE 디버깅
    둘다 사용해야 하는거 아닌가요?

    데드락 같은 경우는 정리된 로그를 보는게 효과적이고
    흐름의 관찰과  코드 변경을 동시에 할 경우 IDE 디버깅이 효과적인것 같습니다.

    한쪽만 사용하는게 편하다고 자랑할 건 아니지만
    다른 한쪽이 불편하다고 하면 그게  무식한 거죠. 
    0
  • dma
    740
    2020-03-26 11:42:18

    로그로해서 간단히 안잡히면 그때 디버그모드로 돌입

    0
  • flyso2
    411
    2020-03-26 12:11:33

    무식한게 자랑은 아닌데 용감하신 분들이 많네요

    -2
  • 메로메로
    292
    2020-03-26 16:22:39 작성 2020-03-26 16:23:24 수정됨

    저는 로그 이전에 모듈 안에서도 더 작은 단위로 Test Case 작성하고, JUnit에서 디버깅한 뒤에 조립하듯이 가져다 붙입니다. Test Case에서 System.out.println 많이 쓰긴 합니다.


    실서버에서는 로그를 남길 때는 System.out.println보다 logger를 이용하는 것을 더 선호합니다. 운영 코드에 System.out.println 찍는걸로 뭐라고 하진 않습니다. 하지만 아래와 같은 코드는...


    if(result) {
        map.put("success", "true");
    } else {
        map.put("success", "false");
    }
    
    System.out.println(1111111111111111111);
    System.out.println(map.put("success", "true"));
    System.out.println(1111111111111111111);
    
    System.out.println(22222222222222222);
    System.out.println(map.put("success", "false"));
    System.out.println(22222222222222222);


    0
  • 워라벨
    975
    2020-03-26 16:28:21

    인텔리J 디버깅 정말 좋더군요..

    0
  • 하늬바람
    493
    2020-03-27 09:34:15

    저의 사수는 디버거를 쓰면 매우 좋지 않게 생각을 했습니다.

    저는 오류가 발생하면 먼저 오류가 발생할 만한 상황을 머릿속에서 시뮬레이션합니다.

    그 후 예측 가능한 가설을 세운 후(한 개 혹은 여러 개) 해당 가설이 맞는지 확인하기 위하여 로그를 찍어봅니다.

    이 방법은 전체적인 로직을 이해하고 있어야 가능하겠지요.

    로직의 이해가 없으면 황새식 사냥법이 되겠네요.

    사수가 디버거 사용을 좋지 않게 생각한 것은 로직의 이해 없이 문제를 해결하려는 부분을 싫어한 것으로 이해했습니다.

    디버거로 복잡한 스레드로 구성된 특히 엔진류의 동시성 문제를 해결하는 것은 매우 어렵다고 생각합니다.

    이상의 이유로 저는 디버거를 가뭄에 콩 나듯 씁니다.

    1
  • 로그인을 하시면 댓글을 등록할 수 있습니다.