반응형

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
반응형


아래는 std::mutex를 이용한 C++ 동기화 예제 코드이다.

C 방식으로 동기화하는 것은 아래쪽에 pthread_mutex 예제를 참고하세요.


C++11 기준.

+std::mutex

#include <mutex>
#include <thread>
std::mutex mtx ;

void ThreadFunc(int nID, int &nVal) {
mtx.lock() ;
동기화 블록
mtx.unlock() ;
}

int main() {
int nVal=0 ;
std::thread th1(ThreadFunc, 0, std::ref(nVal)) ;
std::thread th2(ThreadFunc, 1, std::ref(nVal)) ;
th1.join() ;
th2.join() ;
return 0 ;
}




+ linux C mutex

#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

pthread_mutex_t mutex = PTHREAD_COND_INITIALIZER ;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER ;

int pthread_mutex_lock(pthread_mutex_t *mutex) ;
     다른 thread에서 mutex_lock을 해제할 때 까지 블록된다.
int pthread_mutex_unlock(pthread_mutex_t *mutex) ;
     mutex lock을 돌려준다.

int pthread_cond_signal(pthread_cond_t *cond) ;
     조건변수cond로 시그널을 보낸다. cond에서 wait하고 있는 쓰레드를 깨움.
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) ;
     조건변수 cond 시그널을 기다림. 블록.


ex)


void ThreadA(void *arg) {
pthread_mutex_lock(&mutexa) ;
to do
pthread_mutex_unlock(&mutexa) ;
}

pthread_t threada ;
int thra ;
int status ;
thra = pthread_create( &threada, NULL, ThreadA, (void*)NULL) ;
pthread_join(threada, (void**) &status) ;

gcc .. -lpthread




'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
gdb로 디버깅하기  (0) 2018.03.06
반응형


자바스크립트에서 입력필드값을 타이핑시마다 검증하는 방법이다.


예) textarea의 최대 글자수 체크하여 넘지 못하도록 하기. 

이것은 간단하게 속성으로 설정할 수 도 있지만, 여기서는 예제로 해 본 것이다.

검사 부분을 원하는 입력값 형식체크로 변경하여 사용할 수 있다.


<html>

<head>

<script language="javascript">


function checkLength(obj) {

var maxlen = 10; 

if(obj.value.length > maxlen) {

obj.value = obj.value.substring(0,maxlen);

}

}


</script>

</head>

<body>



<form name="form">

<textarea name="content" cols="20" rows="5" onKeyUp="checkLength(this);"></textarea>

<textarea name="content2" maxlength="10"></textarea>

</form>

<body>


</html>




+ Recent posts