반응형


파이썬 강좌

귀도 반 로섬이 만든  인터프리터 언어. 신화에 나오는 큰 뱀이라는 뜻

고급언어다. 인간적인 언어
문법이 쉽다. 가독성이 좋다.
강력하다. 간결, 무료. 개발 속도가 빠르다.
복수개의 리턴 및 복수개를 한 번에 대입 등이 가능.
""" 지원.
 

줄을 잘 맞춰야 한다. !!!!  그렇지 않으면 실행이 되지 않는다.
{} 이런 괄호를 사용하지 않는다.!!!!     대신 탭을 맞춰야 한다.!!!! indentation!
대신 블록은  for, if 등에서 : 을 마지막에 사용한다.

C의 모듈을 사용할 수 도 있다.
DB, 웹, GUI 프로그래밍도 가능하다.
단점은, 느리다. 

NULL대신 None사용

파이썬은 call by assignment이다???     (자바랑 비슷하다)
     call by value도 reference도 아니다.
     immutable object(int, float, str, tuples등)은 value로 넘어감.
     mutable object(그외)는 reference가 넘어가지만 변경될수도 아닐수도 있다.
     vector를 파라미터로 넘겨서 append를 하면 추가되어 caller에서도 변경된다.
     그러나 할당을 하면 caller에서는 변경되지 않는다. 주소가 변경되니... 당연.

def spam(eggs): 
    eggs.append(1)     # 원본 객체의 메소드로 직접 데이터 변경.
    eggs[0]=77          # 원본 객체의 직접 수정.
    eggs = [2, 3]     # 새로운 객체의 주소가 할당되었다. 원본객체는 이제 이 함수내에서 사용 불가.
    eggs[0]=99
    print(eggs)  ## 무엇이 출력될까?    
99, 3 ; 최종적인 값임.; 0 -> 0, 1-> 77, 1 까지되고 주소변경 ; 2, 3 -> 99, 3

ham = [0] 
spam(ham) 
print(ham)     ## 무엇이 출력될까?  
  77, 1 ; 객체 주소변경전까지만 유효하다; 0, 1 -> 77, 1 까지되고 이후 주소변경됨.


def foo(bar=[]):
     bar.append("baz")
     return bar

foo()     ; baz
foo()     ; baz baz               ; 파이썬의 파라미터 기본값은 최초 한번!만 실행되고, 이후 재사용!한다.
foo([1])     ; 1 baz          ; 주소변경됨.
foo([2])     ; 2 baz          ; 주소변경됨.
foo()          ; bza baz baz     ; 예전 기본값 주소 재사용.     주의!!!! 


try:
     l=["a","b"]
     int (l[2])
except ValueError, IndexError:
     pass
위와 같이 하면 index error 오류를 잡지 못함. ()로 묶어 주어야 한다!!!
except (ValueError, IndexError) as e:


+할당문에 의한 변수 범위 변화          gloal 변수 사용 주의!!!
x=10
def foo():
     x+=1
     print (x)
에러!??? -> x는 local               ; 함수내에 할당문이 있으면 그 변수는 로컬로 한정된다.
; 해결 방안. foo() 함수 내에 global x 를 선언해야 한다.


---------------------------------------------------------------------------------------------



+산술 연산

연산자 ; + - * /  //  %  **

3**2 (squared) => 3^2 주의!!!!!!!!! 파이썬에서는
제곱은 **2 이다.( ^ 아님. )
3/2 => 1.5
int(3/2) => 1          ; 타입 캐스팅.  아래와 같이 더 간단히 가능.
3
//2 => 1     ; 나머지 버림. 정수로 리턴.
% ; 나머지

abs(-6)
= 6
int(73.123)
=73


interactive 모드에서
이전 출력값을 변수  _ 로 사용가능 . 계산기 처럼 쓸 때 유용함.


분수 ; fraction
import fractions
x=fractions.Fraction(1,3)
   
    
    ; 1/3
x*2
Fraction(2,3)
    
    
    ; 2/3

삼각함수
import math
math.pi
math.sin( math.pi/2)
math.tan( math.pi/4)


+ 파이선 버전
python -V
python --version
현재 디렉터리 경로
import os
print (os.getcwd())
확장자로 .py로 작성한다.
python sample.py      ; 이렇게 실행한다.
-샘플)
그냥 계산도 된다.
>>> 1+2
>>> 50-4

# 대입, 복수의 대입도 한 번에 가능. parallel
a=10
a="Python"
a,b,c=0.4,0.2,0.7
피보나치 수열
a,b=0,1
while b<10:
     print(b)
     a, b = b, a+b
# 라이브러리 사용
import sys
sys.exit()


+ range 객체

숫자 범위 리스트를 만들어 준다.   
range(10) ; 0~9
range(1,11) ; 1부터 10     (주의! 11까지가 아니다.)
marks=[90,100,30,40]
for value in marks:
     sum=sum+value
for num in range(len(marks)):
     print(marks[num])
range(1,10) 결과 출력하기
list( range(1,10)) ; 이렇게 list로 변환해주면 콘솔에서 내부 데이터 출력이 가능하다


-print에서 자동개행하지 않게 출력하려면
print ( "abc", end=" ")
print ( "def")



'Python' 카테고리의 다른 글

Python 강좌4 정규식 regular expression  (0) 2018.03.19
Python 강좌3 자료형. 수/문자열  (1) 2018.03.16
Python 강좌2 if/for/while/function  (0) 2018.03.15
Linear regression  (0) 2018.03.13
[python] 보간법 interpolate 사용하기  (0) 2017.05.25
반응형


두 쌍 x,y 데이터 리스트로  데이터에 가장 근접한 하나의 직선 그리기.


위키에 나오는 선형 회귀

통계학에서, 선형 회귀(線型回歸, 영어: linear regression)는 종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법이다. 한 개의 설명 변수에 기반한 경우에는 단순 선형 회귀, 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀라고 한다.[참고 1]

선형 회귀는 선형 예측 함수를 사용해 회귀식을 모델링하며, 알려지지 않은 파라미터는 데이터로부터 추정한다. 이렇게 만들어진 회귀식을 선형 모델이라고 한다.

자세한건 링크


아래 예에서는 data1의 x, y를 list1의 5열, 7열로 보고,

data2의 x, y를 list의 6열, 7열로 보았음.


import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

list1 = [['2012', '1', '3', '1', '832.0', '261.0', '100.00'],
['2012', '1', '5', '1', '507.0', '193.0', '92.50'],
['2012', '2', '3', '1', '412.0', '200.0', '95.00'],
['2012', '2', '5', '1', '560.0', '335.0', '90.00'],
['2012', '3', '3', '1', '584.0', '205.0', '100.00'],
['2012', '3', '5', '1', '595.0', '162.0', '92.50'],
['2012', '4', '3', '1', '504.0', '227.0', '100.00'],
['2012', '4', '5', '1', '591.0', '264.0', '92.50'],
['2012', '5', '3', '1', '489.0', '234.0', '100.00'],
['2012', '5', '5', '1', '561.0', '292.0', '95.00'],
['2012', '6', '3', '1', '622.0', '221.0', '100.00'],
['2012', '6', '5', '1', '478.0', '204.0', '92.50'],
['2012', '7', '3', '1', '974.0', '290.0', '100.00'],
['2012', '7', '5', '1', '553.0', '269.0', '95.00'],
['2012', '8', '3', '1', '473.0', '158.0', '100.00'],
['2012', '8', '5', '1', '526.0', '174.0', '92.50'],
['2012', '9', '3', '1', '701.0', '189.0', '95.00'],
['2012', '9', '5', '1', '502.0', '179.0', '97.50'],
['2012', '10', '3', '1', '470.0', '184.0', '100.00'],
['2012', '10', '5', '1', '579.0', '218.0', '92.50']]

def drawabline(xy):

slope, intercept = np.polyfit(xy[:,0], xy[:,1], 1)
print(slope, intercept)
# or this
# slope, intercept, r_value, p_value, stderr = stats.linregress(data2)
# print(slope, intercept)

abline_values = [slope * i + intercept for i in xy[:,0]]

plt.figure()
plt.scatter(xy[:,0], xy[:,1])
plt.plot(xy[:,0], abline_values, 'b')
plt.show()

data = np.asarray(list1, dtype=np.float)
data1 = np.array( data[:,(4,6)])
print( 'data1=', data1 )
drawabline(data1)

data2 = np.array( data[:,(5,6)])
print( 'data2=', data2 )

drawabline(data2)

직선의 방정식으로 기울기, y절편값이 나왔으니, 임의의 x값에 대해서 y값 추정이 가능.

y = slope * x + intercept


출력 결과









반응형

tomcat7 서비스 시작 스크립트. update 버전!

전에 restart 스크립트가 장애발생 위험이 있어서 개선이 필요하다고 했다.
catalina.sh에서 CATALINA_PID 경로를 지정했으면, tomcat 구동시 pid 파일이 생성된다.

톰캣 pid 구하는 방법


PID=`cat "$CATALINA_PID"`

현재 pid가 떠 있는지 확인


ps -p $PID > /dev/null 2>&1
if [ $? -eq 0 ] ; then
     echo "process is alive."
else
     echo "process is not found."
fi
  • 주의! ; 스크립트에서 주석도 써줘야 함. (chkconfig에서 인식문제)
  • 아래 스크립트를 /etc/init.d에 생성 (파일명은 서비스명)
  • 서비스 자동시작 추가
  • tomcat 계정으로 서비스를 구동하므로 tomcat 계정이 시스템에 있어야 한다 .

#chkconfig --add tomcat7
#chkconfig --level 2345 tomcat7 on
#chkconfig --list tomcat7

# cat tomcat7
---------------------------------------------------
#!/bin/bash
#
# tomcat     This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Short-Description: start and stop tomcat
### END INIT INFO

TOMCAT_USER=tomcat
TOMCAT_HOME="/usr/tomcat7"
CATALINA_PID=/usr/tomcat7/bin/tomcat.pid
SHUTDOWN_WAIT=45

tomcat_pid() {

#톰캣 pid 구하는 방법
PID=`cat "$CATALINA_PID" 2>&1`
#현재 pid가 떠 있는지 확인
ps -p $PID > /dev/null 2>&1
if [ $? -eq 0 ] ; then
        #     echo "process is alive."
        echo $PID
else
        #     echo "process is not found."
        echo ""
fi
}


start() {
    pid=$(tomcat_pid)
    if [ -n "$pid" ]
    then
        echo "Tomcat is already running (pid: $pid)"
    else
        # Start tomcat
        echo "Starting tomcat"
        /bin/su - -c "cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/startup.sh" $TOMCAT_USER
    fi
    return 0
}

stop() {
    pid=$(tomcat_pid)
    if [ -n "$pid" ]
    then
        echo "Stoping Tomcat"
        /bin/su - -c "cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/shutdown.sh" $TOMCAT_USER

    let kwait=$SHUTDOWN_WAIT
    count=0
    count_by=5
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
        echo "Waiting for processes to exit. Timeout before we kill the pid: ${count}/${kwait}"
        sleep $count_by
        let count=$count+$count_by;
    done

    if [ $count -gt $kwait ]; then
        echo "Killing processes which didn't stop after $SHUTDOWN_WAIT seconds"
        kill -9 $pid
    fi
    else
        echo "Tomcat is not running"
    fi

    return 0
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
       pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
           echo "Tomcat is running with pid: $pid"
        else
           echo "Tomcat is not running"
        fi
        ;;
esac

exit 0
반응형




+톰캣을 root 계정이 아닌 tomcat 계정으로 실행 하기

우선 tomcat 계정을 생성한다.
# useradd -M tomcat

톰캣 계정 설정 확인
계정을 생성하면 home 디렉토리가 /home/tomcat으로 설정 되며, 이를 CATALINA_HOME으로 변경해준다.

# grep tomcat /etc/passwd
tomcat:x:503:503::/usr/local/tomcat:/bin/bash

실행 스크립트 작성하기 (간략버전)
# vi /etc/rc.d/init.d/tomcat

아래 내용을 작성한다.  ==> 서비스 재시작(restart)시 문제가 발생할 수 있음!!! 주의! (binding fail.) => 서비스 shutdown이 완전히 완료되었는지 확인하는 작업이 필요함.

(아래는 간략 버전이므로 restart는 정확성이 보장 안됨. 다음에 나오는 update 버전 참고)
#!/bin/bash
# Startup script for the Tomcat Server
# chkconfig: 345 50 50
# description: Tomcat is a Web application server.
# processname: java
# directory : CATALINA_HOME=/usr/local/tomcat
. /etc/profile
case "$1" in
    start)
        echo "Starting tomcat: "
        su - tomcat -c $CATALINA_HOME/bin/startup.sh
        ;;
    stop)
        echo "Shutting down tomcat: "
        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh
        ;;
    restart)          # 안전하지 않으니 restart는 하지 말 것.
        echo "Restarting tomcat: "
        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh; su - tomcat -c $CATALINA_HOME/bin/startup.sh
        ;;
    *)
        echo "Usage: service tomcat {start|stop|restart}"
        exit 1
esac
exit 0

소유권을 tomcat으로 변경
# chown tomcat:tomcat tomcat 

tomcat 스크립트에 실행권한 주기
#chmod 755 tomcat

runlevel에 등록
chkconfig에서 add 될 수 있도록 스크립트에 "# chkconfig: 345 50 50" 를 추가한다.
#chkconfig --add tomcat


실제로 리부팅시 톰캣이 tomcat 계정으로 실행되는지 확인한다
# reboot

톰캣 실행시 데몬실행이 tomcat으로 되어 있는지 확인한다.  tomcat이 아닌 root인경우는 잘못된 경우임
# ps -ef | grep tomcat

톰캣 프로세스 수동 시작 및 종료
# service tomcat start
# service tomcat stop



반응형


+정규식으로 스트링의 일부를 찾아 추출한다.



cpp 정규식 검색/매칭

- 스트링에서 특정 class명으로 나온 태그에서 href의 url 부분만 추출하기.
-1단계
class="i-e" 로 시작하고, <, > 문자가 나오기 전까지 중간 부분 추출.
-2단계
추출된 부분에서 href=으로 시작하고 ", " 사이에 있는 중간 부분 추출.

regex_search() 함수로 찾는다. match 결과의 [0]은 패턴이 맞는 부분의 전체 스트링을 추출.
[1], [2], 등은 그 다음에 패턴에서 ()로 싸인 부분 순서대로 추출.


#include <iostream>

#include <string>

#include <regex>

using namespace std ;

string html="<a class=\"i-e\" href=\"DATA IM INTERESTED IN\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like1\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like2\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" style=\"font-size:10pt;\" href=\"ie like3\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like4\"> <a class=\"i-e\" href=\"ie like5\">\n\

";

int main() {

smatch m, m2 ;

regex e ( "class=\"i-e\"([^<>]+)>" ) ; // get: href="ie like"

regex e2 ( "href=\"(.+)\"" ) ; // get ie like

bool r, r2 ;

string content ;

int start=0 ;

cout << "input html : " << html << endl ;

do {

content = html.substr(start) ;

// cout << "content:"<<content<<endl;

r=regex_search(content, m, e) ;

if ( r ) {

// cout << "search: " << r << endl ;

// cout << "str: " << m.position() << " "<< m.str() << endl ;

cout << "match : " << m[1] << endl ;

r2 = regex_search((string)m[1], m2, e2) ;

if ( r2 ) {

cout << " URL : " <<m2[1]<<endl ;

}

}

start+=m.str().length()+m.position();

} while( r );

return 0 ;

}

g++ test_regex2.cpp
./a.out

input html : <a class="i-e" href="DATA IM INTERESTED IN">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like1">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like2">

<a class="chrome" href="nono chrome">

<a class="chrome" href="nono chrome">

<a class="i-e" style="font-size:10pt;" href="ie like3">

<a class="chrome" href="nono chrome">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like4"> <a class="i-e" href="ie like5">


match :  href="DATA IM INTERESTED IN"

 URL : DATA IM INTERESTED IN

match :  href="ie like1"

 URL : ie like1

match :  href="ie like2"

 URL : ie like2

match :  style="font-size:10pt;" href="ie like3"

 URL : ie like3

match :  href="ie like4"

 URL : ie like4

match :  href="ie like5"

 URL : ie like5


'Develop > C&CPP' 카테고리의 다른 글

Vector 3  (0) 2018.05.23
Vector 2  (0) 2018.05.18
Vector 1  (0) 2018.05.16
gdb로 디버깅하기  (0) 2018.03.06
mutex 동기화 예제  (1) 2018.03.06
반응형

자주 사용하는 이클립스(eclipse) 단축키


개발툴에서는 단축키 사용이 필수인데, 여러가지를 쓰다보면 가끔 기억이 나지 않을 때가 종종 있습니다. 주로 많이 쓰는 이클립스 단축키들을 정리해봤습니다.



+ 일반적인 기능 단축키

-동일한 파일을 2개 창으로 보기
ctrl+{    ; 좌우로 보기 (ctrl+shift+{) 

-파일2개를 창2개로 보기
추가로 열 파일을 탭에서 드래그하여 원하는 윈도우 박스 위치에 놓는다.


(컨, ^ - 컨트롤 키 ,  쉡-쉬프트 키, @-알트 키)

컨쉽+O ; auto import
컨쉽+T ; 클래스 찾기
컨쉽+위/아래 ; 메소드 이동(위, 아래)
컨쉽+스페이스 ; 파라미터 보기
컨쉽+F ; 자동 코드 들여쓰기 정리. form feed.

컨+O ; 현재소스내에서 메소드나 필드로 이동 ; method
컨+T ; class tree보기/이동 상속관계 ; tree

컨+K ; 찾는 문자열 블록선택후, 연속으로 찾기. 반대방향은 쉽 추가.

컨+D ; delete line
컨+I ; auto indent (one line)



+ 가장 필요한 단축키.  
Code Assit
추적
돌아가기
실행

@+방향키(왼쪽화살표) ; 이전 커서 위치로 이동!!!!!! 소스추적하다가 되돌아갈때 필수!
^+Space ; 코드 파라미터 보기  (sysout 자동풀기)
(리눅스에서는 @+/ )

F3 or  ^클릭 ; 함수 추적
^+F11 ; 실행
^F6 ; 이전 에디터창(소스). 
^Q ; 소스 마지막 수정위치로 이동
^+SHIFT+/ ; 블록 주석처리
^+  / ; 주석처리
^+SHIFT+F ; 코드 정리 (인덴테이션)



+이클립스 (MAC)맥에서 단축키  (Com - 커맨드 키)

(@대신Com)+방향키 ; 이전 커서 위치로 이동
(Com추가)+^+Space ; 코드 파라미터 보기
F3 or  ^+클릭 ; 추적
(FN추가)+^+F11 ; 실행
^F6 ; 이전 에디터창(소스). 
^Q ; 소스 마지막 수정위치로 이동
^H ; 전체 검색

^K ; 다음 찾기. 이전찾기 ^+SHIFT+K




반응형

입력창에 실시간으로 숫자키만 입력 받도록 하고, 출력하는 기능예제입니다.

보통은 onsubmit 이나 onchange에서 처리해도 되지만, 키 타이핑시 마다 즉시 체크하도록 하여 아예 입력이 안 되도록 합니다. 

검사 루틴만 변경하면 원하는 key typing만 받도록 처리할 수 있습니다.

<input id="myinput" onkeypress="javascript:return myFunction(event);" onkeyup="myFunction2();">

</input>

only numbers...

<p id="demo"></p>


<script>

function myFunction(evt) {

  var charCode = (evt.which) ? evt.which : event.keyCode;

        if (charCode > 31 && (charCode < 48 || charCode > 57)) {

            return false;

        }

        return true;

}

function myFunction2() {

    var x = document.getElementById("myinput").value;

    document.getElementById("demo").innerHTML = "You selected: " + x;

}

</script>



반응형


링크 태그인 a를 보면 기본적으로 밑줄이 있고, 방문했던 링크는 색깔도 변한다.

보기에 안 좋을 수 있다.

css를 추가하여 간단하게 깔끔하게 원하는대로 변경할 수 있다.


예)

a:link { color:#0000ff; text-decoration: none;}  

a:visited { color:#0000ff; text-decoration: none;} 

a:hover { color:#cc0000; text-decoration: none;}

a:active { color:#ff0000; text-decoration: none;}


의미는 다음과 같다.

link는 기본 텍스트 색상
visited는 방문했던 적이 있는 링크
hover는 마우스가 해당 링크정보 위로 올라갔을 때
active는 마우스로 클릭하는 순간 짧은 시간 동안.

정리하면 처음에는
link 상태에서 마우스가 위로 올라가면 hover 여기서 클릭하면 active로 짧게 상태로 변경되었다가 visited로 된다.




반응형


frame을 나누어 메뉴페이지와 내용 페이지들을 분리하여 구성하고 있는데, 외부에서 직접 내용 페이지 URL로 접근할때 메뉴 페이지나 상단 타이틀 페이지 등 다른 페이지들이 출력되지 않는 문제가 있다.

frame 내부 페이지 직접 접근시 최상위 페이지로 이동하게 만드는 기능.


서브페이지 코드에 이동할 최상위 페이지를 지정해 둔다. 메뉴 선택을 바로 들어갈 수 있도록 파라미터로 이동 메뉴를 준다.

<script>

// 프레임 페이지 직접 접근 차단. 메인 페이지로 이동

self.onload = function init() {

if ( self==top ) {

self.location = "/?menu=hash" ;

}

}

</script>


최상위 페이지 코드 (index 페이지)
위에서 GET 파라미터로 준 메뉴를 디폴트 페이지로 내용을 설정하는 작업. 
예시)
<frameset cols="200px,*" border="0">
<frame name="menu" src="./menu.php">
<?php
$t = $_GET['menu'] ;
if ( $t && $t!="") {
if ( $t=='link' )
$t='link.php' ;
else if ( $t=='encode')
$t = 'encode.php';
else if ( $t=='hash')
$t = 'hash.php';
else if ( $t=='encrypt')
$t = 'encrypt.php';
else
$t='encode.php' ;
} else
$t='encode.php';
?>
<frame name="right" src=<?php echo "\"$t\"";?> >
</frameset>



반응형

gdb 사용하기(디버깅)

C/CPP로 작성한 프로그램을 실시간 디버깅할 때 사용한다.
또는 에러 발생으로 core dump가 떨어지면 그 상태의 메모리 정보를 로딩하여 디버깅도 할 수 있다.

- gdb 실행
gdb [core]나 [실행 파일]
gdb a.out core
gdb a.out 1234 (attach to pid)
r [parameter]

- 파라미터
r [parameters]
l (file:function or line#) ; 소스


- break
break [function name]
break function1

- 다음 코드로 계속 진행
c ; continue

n ; next (step over)
s ; step (step into)

- bt ; back trace
call 스택 보기. 어느 함수에서 죽었는지 확인 가능. 디버깅 정보가 포함되어 있으면 코드 라인까지 나온다.

-q ; quit




1. 먼저 컴파일시 -g 옵션을 주어, 디버그 정보가 남도록 한다.

gdb [program]

2. 소스보기
l (list)  ; 파일:함수명, 함수명, 라인번호

set listsize 20 (20줄씩 나오게한다.)
l main
l 25
l file.c:func:

3. 실행
r (run) [arg1] [arg2] ...
k (kill) ; 프로그램 종료
s (step) ; trace into.
n (next) ; next line. (function skip...)
c (continue)
u (until) ; 현재 루프를 빠져나감
finish ; 현재 함수를 수행하고 빠져나감
return ; 현재 함수를 수행하지 않고 빠져나감.
return (x) ; 리턴함.


4. BP (break point)
b 19
b main
b file.c:10
b -2
b 10 if tmp==0  ; tmp가 0일때 10라인에 bp 설정

cl hello   ; BP 삭제
cl 10
cl file.c:20
d  ; BP 모두 해제

info breakpoints ; BP 목록
줄여서 i b  (TAB키 사용 가능)
enable 2
disable 2

5. w (watch)
watch i ; i값이 변경될때마다 알려줌. bp

info locals ; 지역변수 보기
info variables ; 전역 변수 리스트
p (printf) ; 개별 변수 보기

p *p ; 포인터 값 보기
p $eax ; 레지스터 값

display i ; 변수값을 항상 display
undisplay i;

6. 스택
bt (backtrace) ; 스택 출력
info f (frame)
info args
info locals

bt
frame 3
up ; 상위 스택 프레임으로 이동
down ; 하위 스택 프로임으로 이동



+ 쓰레드 정보
info threads

-디버깅 쓰레드 전환
t 쓰레드인덱스번호







'Develop > C&CPP' 카테고리의 다른 글

Vector 3  (0) 2018.05.23
Vector 2  (0) 2018.05.18
Vector 1  (0) 2018.05.16
정규식으로 스트링 일부 추출하기  (0) 2018.03.10
mutex 동기화 예제  (1) 2018.03.06

+ Recent posts