Visual Leak Detector 를 사용하여 Leak을 감지하는 방법.

Visual Leak Detector 를 사용하여 Leak을 감지하는 방법.

사용조건

  • Visual Studio 2008/2010/2012/2013/2015

사용방법 (VS2010 기준으로 설명합니다.)

  • Visual Sutdio 설정을 합니다.
    • VS를 실행하고, 적용할 솔루션을 엽니다.
    • VS를 실행해서 보기 > 다른 창 > Property Manager 창을 엽니다.
    • Property Manager 창에서 아무 프로젝트에서든 선택하고 적용하고자 하는 구성에서 "Microsfot.Cpp.x64.user"를 더블클릭 합니다.
    • 속성 페이지가 열리면, 왼쪽 메뉴 트리에서 VC++ Directorys > Include Directories에 VLD의 include 경로를 추가합니다.
      • 저는 "C:\Program Files (x86)\Visual Leak Detector\include" 여기에 설치되어 있네요.
    • 같은 창의 Libaray Directories에 VLD의 lib 경로를 추가합니다.
      • 저는 64 비트라서 "C:\Program Files (x86)\Visual Leak Detector\lib\Win64"를 추가 했네요.
      • 한번만 하면 솔루션 아래 여러개의 프로젝트가 있는경우 모두 반영됩니다.
  • stdafx.h 파일에 아래 코드를 추가합니다. 
    #include <vld.h>
    
    • 공식 Document에는 stdafx.h 호출후에 넣으라고 하는데, stdafx.h 파일에 넣어도 잘 돌아갑니다.
    • 공통되는 헤더 파일이 있으면 거기에 추가하면 됩니다.
  • 이제 VS에서 F7로 컴파일하고, F5로 실행합니다.
  • 프로그램이 정상 종료되면, 출력 > 디버그 창에 Leak 정보가 출력 됩니다.
    • VS의 디버그 중지로 하면 안됩니다.

참고

  • 직접 실행하는 경우.
    • 컴파일된 실행 파일을 VS에서 실행하지 않고 탐색기(또는 CMD)에서 직접 실행 하는 경우 아래 파일이 실행 파일과 같은 경로에 있어야 합니다.
      • dbghelp.dll
      • Microsoft.DTfW.DHL.manifest
      • vld_x64.dll
    • 해당 파일은 64비트의 경우 C:\Program Files (x86)\Visual Leak Detector\bin\Win64 에 있습니다.


리눅스 배포판별 docker 설치 방법

Docker 설치

공식 문서: http://docs.docker.com/installation/

  • 64 bit 기준으로 테스트 해봤습니다.


Red Hat Enterprise 6.2

공식 문서에는 rhel 7 부터 지원하지만, 아래 방법으로 설치 가능

  • yum 저장소를 centos 로 수정.
rpm -ivh  http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

vi /etc/yum.repos.d/epel.repo
# cd /etc/yum.repos.d
# cp rhel-debuginfo.repo rhel-debuginfo.repo.bak
# vim rhel-debuginfo.repo

baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
  • update
yum repolist
yum update
  • Disable selinux & reboot
vi /etc/selinux/config
SELINUX=disabled

reboot now
  • 인증키 생성
rpm --import http://mirror.centos.org/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
  • update
yum install libdevmapper.so.1.02
  • docker 설치
yum -y install docker-io
reboot now


Cent OS 6.6

yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install docker-io


Ubuntu 14.04

apt-get update
apt-get upgrade
apt-get install -y less vim openssh-server curl

apt-get install docker.io
    or
curl -sSL https://get.docker.com/ | sh


Debian 8

공식 문서대로는 설치가 안됨.

apt-get update
apt-get upgrade
apt-get install -y less vim openssh-server curl
wget http://ftp.kr.debian.org/debian/pool/main/a/apparmor/libapparmor1_2.9.0-3_amd64.deb
dpkg -i libapparmor1_2.9.0-3_amd64.deb
wget http://ftp.kr.debian.org/debian/pool/main/a/apt/libapt-pkg4.12_1.0.9.8.1_amd64.deb
dpkg -i libapt-pkg4.12_1.0.9.8.1_amd64.deb
wget http://ftp.kr.debian.org/debian/pool/main/a/apt/apt-transport-https_1.0.9.8.1_amd64.deb
dpkg -i apt-transport-https_1.0.9.8.1_amd64.deb
curl -sSL https://get.docker.com/ | sh



FAQ html 템플릿

개요

FAQ를 워드나 엑셀이 아니고, html로 만들고자 합니다. 

문서를 보기 위해서는 인터넷이 되어야 한다는 단점은 있지만, 추가 프로그램(워드, 엑셀)의 설치가 필요없고 웹브라우져만 있으면 볼수 있다는 장점이 있습니다. 그리고 반응형 웹페이지로 만들면 워드나 엑셀에서는 구현하기 어려운 효과들도 넣을 수 있습니다.


필수 조건

  • 카테고리 구분이 되어야 한다.
  • FAQ 본문은 추가/수정을 쉽게 하기 위해 json 구조로 관리되어야 한다.
  • 답변 데이터는 markdown 문법을 지원해야 한다.
  • html 파일 하나로 내용을 볼 수 있어야 한다.(jquery, Bootstrap등은 CDN사용)


사용한 Library

  • FAQ 탬플릿 중에 깔끔하다고 판단되는 Bootstrap FAQ를 사용했습니다.
  • markdown 파서는 gfm 지원하는 것 중 사용이 편해 보이는 marked를 사용했습니다.


구현

  • 소스 코드는 정말 간단하므로, 첨부 문서로 대신합니다.


참고 URL



FAQ.html

debian 계열 linux에서 core 파일 생성 방법

1. core 파일을 최소 크기를 설정 한다. 

 $ ulimit -c unlimited 
 $ ulimit -a 

 2. core 파일의 네이밍 룰을 지정한다. 

 $ echo "/etc/core" > /proc/sys/kernel/core_pattern 

> login 시 마다 동일한 설정을 해야 한다. 

[ 참조 ] 
http://kthan.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4Linux-ulimit-%EC%9C%BC%EB%A1%9C-coredump-%EC%84%A4%EC%A0%95 
http://manywaypark.tistory.com/entry/core-file%EC%9D%80-%EC%96%B4%EB%94%94%EC%97%90


최적의 makrdown editor는 sublime text

OSX에서 다시 Windows환경으로 넘어오면서, makrdown editor를 찾아 해맸다.

결론은 OS 구분없이 Sublime Text 였다.

[Sublime Text 3] + [MarkdownEditing] 플러그인 + [OmniMarkdownPreviewer] 플러그인 + [Table Editor] 플러그인 조합이다.

문제는 Windows 환경에선 한글 입력창이 이질감이 느껴진다는 것인데,

그것도 [IMESupport] 플러그인으로 완벽하진 않지만 쓸만해 졌다.

하지만, OS 차이로 일부 단축키가 바뀐건 아직 적응이 잘 안된다.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2017-04-04

[Visual Studio Code] + [Preview] 플러그인 조합을 사용해보고 있는데, 이것도 좋다.


문자열 치환

  • 하나의 파일에서 치환

    • vi 사용:%s/old/new/g
    • sed 사용sed -i 's/old/new/g' ./file.html
  • 여러 파일을 한꺼번에 치환find ./ -name "*.html" -exec sed -i 's/old/new/g' {} \;
  • 특정 파일만 제외하고 치환find . ! \( -name '*.jar' -prune \) -exec sed -i 's/old/new/g' {} \;


Serial-port 관련 자료 정리

centos 에서 Serial-Port를 이용한 파일전송 모듈을 개발하면서 정리한 자료 입니다.

 

시리얼 포트 상태 확인

  • 장치 확인

    $ cat /proc/tty/driver/serial
    serinfo:1.0 driver revision:
    0: uart:16550A port:000003F8 irq:4 tx:930342833 rx:215304 brk:145317 RTS|CTS|DTR|DSR
    1: uart:16550A port:000002F8 irq:3 tx:1090 rx:0 RTS|CTS|DTR|DSR|CD
    2: uart:unknown port:000003E8 irq:4
    3: uart:unknown port:000002E8 irq:3
  • 커널에서 시리얼 드라이버 load 되었는지 확인

    $ dmesg | grep tty

    • 정상적인 경우
      serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
      serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
      00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
    • 예외 상황
      Xen virtual console succefully installed as ttyS0
      • Xen에서 가상콘솔을 사용하는 듯.
      • 출처: https://kldp.org/node/91683
      • 해결 방안: 부팅 관리자에서 Xen이 없는 것으로 부팅
        $vi /boot/grub/grub.conf
        default = 1   <- Xen이 없는 것으로 부팅 '0' 시작 Index
  • 간략한 포트 확인

    $ setserial -a /dev/ttyS0
    /dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
      Baud_base: 115200, close_delay: 50, divisor: 0
      closing_wait: 3000
      Flags: spd_warp skip_test

  • 조금 더 자세한 포트 확인

    $ stty -F /dev/ttyS0
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; start = <undef>; stop = <undef>; susp = <undef>;
    rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>; min = 0; time = 100;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

  • 상세한 포트 확인

    stty -a < /dev/ttyS0
    speed 115200 baud; rows 0; columns 0; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; eol = <undef>; eol2 = <undef>; swtch = <undef>;
    start = <undef>; stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 100;
    -parenb -parodd cs8 -hupcl -cstopb cread clocal crtscts -cdtrdsr
    -ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
    -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

시리얼 포트 설정 변경 및 복구

시리얼 포트로 접속 테스트

OSX 에서 시리얼 포트 테스트 방법

  • 시리얼 포트가 없으므로 USB2Serial 젠더나 케이블이 필요하다.
  • 터미널에서 screen 유틸 사용
  • GUI에서 SerialTools 유틸 사용(AppStore에 있음) - 연결 상태를 눈으로 확인 할 수 있어서 추천함.

시리얼 포트 통신 프로그래밍

  • 시리얼 통신 특이사항
    • BAUDRATE을 높게 잡아도 특정 수치 이후로는 속도가 같다.
      • null cable 사용시 11,531 byte per sec 정도 나옴.
    • 버퍼를 255 이상 잡으면 짤려서 전송된다.
      • 송/수신시 나눠서 전송 할 필요가 있다.
    • 전송중에 케이블을 빼도 상태를 알수가 없다.
      • 프토토콜을 정의할 필요가 있다.
    • non-canonical, x초(0.1초이상) 동안 입력이 없으면, timeout 처리 되록 하는것이 최적인듯 하다.
      newtio.c_lflag     = 0;
      newtio.c_cc[VTIME] = 100;
      newtio.c_cc[VMIN]  = 0;
    • 속도가 매우 느리므로 데이터를 압축해서 보내는 것이 좋다.
  • 문서

시리얼 포트로 터미널 접속 셋팅(서버측)

참고 문서



카카오톡 그룹 채팅방 통계

[ 개요 ]


카카오톡의 기능 중에 "대화내용 이메일로 보내기"라는 기능이 있습니다.

이 기능을 사용하면, 대화 내용이 포함된 Text파일이 생성되는데, 이 Text 파일을 사용해서 누가 몇건의 챗팅을 보냈는지 통계를 내는 Web 페이지를 만들어봤습니다.


HTML과 Javascript로만 구현되어 있어서, 웹서버 없이 Local에서도 실행이 가능 합니다.



[ 기능 ]


1. 웹 브라우져를 열어 아래 URL로 이동 합니다.




2. 페이지를 열면 아래와 같이 나옵니다. 버튼을 클릭해 Text 파일을 선택합니다.



3. Table 형태로 누가 몇건의 챗팅을 했는지 보여줍니다.




4. Pie Chart 로도 내용을 보여줍니다.




[ 구현방법 ]


1. Text 파일의 파싱은 정규식을 이용해 Javascript로 구현 했습니다.


아래 함수를 거치면, [ 대화명: 건수, 대화명: 건수.... ] 형태로 계산됩니다.


  function parsing(c) {
    var lines = c.split("\n");
    var arr = {};
    
    for(i in lines) {
      var obj=lines[i].match(/^.+, ([^:]+) :.*/);
      if ( obj && obj.length >= 2 ) {
        if ( arr[obj[1]] >= 0 ) arr[obj[1]] += 1;
        else arr[obj[1]] = 1;
      }
    };
    
    return arr;
  }


2. Table은 Dynatable.js 을 이용했습니다.

   ( http://www.dynatable.com/ )


3. Char는 highcharts.js를 이용했습니다.

   ( http://www.highcharts.com/ )



Web Notepad

자세한 내용은 github에 올린 내용을 옮깁니다.

node.js와 ace.js를 사용했고, 사실 코딩 시간보다 ace.js에 대한 분석 시간이 더 길었습니다.

개발하면서 node.js에 대한 이해에도 도움이 되었지만, sub domain 셋팅을 위한 

Apache VirtualHost 셋팅 방법과 github를 접할 수 있던 것이 좋았네요.


[소개]

* Web에서 소스 코드를 편집할 수 있는 note pad 입니다.

* 같은 문서를 다른 사용자가 열고 있을 경우 실시간으로 편집 내용이 갱신 됩니다.

* Ace Editor가 지원하는 100여개 언어의 syntax highlighting을 지원 합니다.

* note.js를 스터디 하고자 하는 목적으로 시작했습니다.

* https://github.com/lmk/note/wiki


[사용법]

1. http://note.newtype.pe.kr/:document.:format 으로 접속 합니다. 

   ( 예, http://note.newtype.pe.kr/test1.js )

2. :document에 해당하는 문서가 열리거나 생성됩니다.

3. :format로 문서가 syntax highlighting 됩니다.

4. 같은 문서를 다른 사용자가 열고 있을 경우 실시간으로 편집 내용이 갱신 됩니다.


[동작환경]

* node.js v0.10.22

* ejs@0.8.3

* express@3.4.4

* socket.io@0.9.16


[참고사이트]

* Ace Editor - http://ace.c9.io/#nav=about

* Node.js - http://www.nodejs.org/api/

* socket.io - http://socket.io/







shell script로 구현하는 URL 상태 체크

Shell Script로 특정 URL의 상태를 체크하고자 합니다.


curl을 이용하면 간단 하네요.

curl은 결과를 exit code로 리턴 합니다.

exit codes list는 아래 man page를 참고하세요.

http://curl.haxx.se/docs/manpage.html )


#! /usr/bin/sh

function check {
     if [ $? -ne 0 ] ; then
         echo "Error occurred getting URL $1:"
         if [ $? -eq 6 ]; then
             echo "Unable to resolve host"
         fi
         if [$? -eq 7 ]; then
             echo "Unable to connect to host"
         fi
         exit 1
     fi

}
curl -s -o "/dev/null" $1
check;


[ 출처 ]

http://answers.google.com/answers/threadview/id/276934.html