1. 사용

컴파일 할때 -g 옵션을 사용해서 컴파일 gcc -g -o (프로그램명) (소스파일명)

실행: gdb (프로그램명)


2. 종료

q, quit, ctrl+d


3. 소스보기 (list / l)

10줄씩 출력한다.   (*출력단위 변경 ; set listsize (줄 단위) )

list : 메인함수 기준 출력

list (숫자) : 숫자를 기준으로 10줄 출력

list function : 함수 소스 출력

list - : 현재 출력된 리스트의 이전 행을 출력


4. 실행

(1) run /r : 이상이 발생했을때 오류가 생긴 부분도 출력해줌 

(2) bt : back trace 의 약어로 오류가 생긴부분에서 그 전 과정을 보여준다. 

(3) kill / k : 프로그램 종료

(4) step / s: 현재 행 실행. 함수안으로 들어갈 수 있음 (s 3 : step 3번한 결과)

(5) next / n : 현재 행 실행. 함수도 바로 실행(n 4: next 4번 결과)

* s/n다음에 i를 붙이면 어셈단위 실행 (si, ni)

(6) continue / c : 다음 bp까지 실행

(7) finish : 현재함수 수행 후 빠져나감

(8) return : 현재 함수 수행하지 않고 빠져나간다 (return (값) : 리턴값 지정 가능)



5. bp(break point 설정)

break / b

(1) break (행 번호) : 그 행에 bp 설정

(2) break (함수 이름) : 함수의 시작 부분에 bp 설정

(3) break (파일이름):(함수이름) : ~파일의 ~함수의 시작부분에 bp설정

(4) break +/- (숫자) : 현재에서 숫자만큼 더하거나 뺀부분에 bp설정

(5) break *0x111111: 특정 주소에 설정

(6) break ... if (조건) : 조건을 만족할때 bp설정

(7) tb : 1회용 bp

(8) info break : 현재 bp 정보

(9) cl : bp 지우기        delete (n) : 고유번호 n번의 bp지우기

(10) d : 모든 bp지우기


(11) watch (변수) : 특정 변수에 watch 를 설정하면 이 변수가 바뀔때마다 break 가 걸리면서 값을 출력


6. 변수 정보

info locals : 현재 상태의 지역변수와 값을 보여줌

info variables : 전역변수 리스트

info registers : 레지스터 전체 리스트

p/print (변수) : 변수 값
 p (함수명)  : 함수의 주소 

중복된 변수가 있는 경우 ( 지역변수 우선 ) -> p '(파일명)'::(변수명) : -파일에 있는     전역변수 를 출력

포인터 변수의 경우 위의 방법으로 하면 주소값만 출력.
포인터 변수의 값 또는 포인터 구조체 등의 값을 보기 위해서는 * 를 붙여준다.
   p  *(변수)
    p $(레지스터명)
   print (함수명)::(변수명) : 특정 함수 내 변수

p명령어는 기본적으로 10진수로 출력한다.

다른진수로 출력하는 법 

    p/t (변수)    2진수
    p/o (변수)    8진수
    p/d (변수)    10진수
    p/u (변수)    부호없는 10진수
    p/x (변수)    16진수
    p/c (변수)    최초 1바이트 값을 문자형으로
    p/f (변수)    부동소수점값
   
p는 값을 설정하는 것도 가능

    p (변수) = 값 


7. 변수 디스플레이

display (변수) : 진행중 계속 변수 출력

undisplay (변수) : 디스플레이 없애기 

disable/enable display (변수) : 일시정지/활성


8. 스택

frame / f

info f : 현재 스택프레임 정보

frame (프레임 번호) : ~번 프레임으로 이동

up : 상위 프레임 이동

down : 하위 프레임 이동

info args : 현재 스택 프레임 함수의 인자 출력

info locals : 현재 스택프레임 함수의 지역변수


9. 메모리 상태

x/(범위) (출력형식) (범위 단위) : 메모리 특정범위의 값 확인 (기본 단위 : 4 byte)


출력방식

-t : 2진수

-o : 8진수

-d / u : 부호없는 10진수

-x : 16진수

-c : 최초 1바이트 문자로 출력

-f : 부동소수점

-s : 문자열

-i : 어셈형식


범위 단위

-b : 1byte

-h : 2byte

-w : 4 byte

-g : 8byte


예시 : x/10tb main : main 함수로 부터 10 byte 를 2진수로 출력

   x/10xg 0x1293834 : 주소로 부터 80byte를 8 byte 단위로 15진수로 출력


10. 디스 어셈블링

disas (함수이름)

disas (시작주소) (끝주소) : 어셈블리 코드를 보여줌


11. 함수 호출

call (함수이름)((인자1),(인자2)) : 특정함수 인자값으로 호출


12. 주소로 분기

jump *0x123532 : ~주소로 분기

jump (행번호) : ~행으로 분기

jump (함수) : -함수로 분기


13. 시그널


14. info 명령


15. 환경설정





'시스템 > 리눅스 기본' 카테고리의 다른 글

라이브러리 참조순서  (0) 2016.10.15
알아두면 좋은 명령어 모음  (0) 2016.10.13
gdb layout  (0) 2016.10.13
find 명령어 정리  (0) 2016.09.30
shellcode  (0) 2016.09.20

출처 백준 온라인 저지 11404 번

문제

n(1≤n≤100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다.

모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최소값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 도시의 개수 n(1≤n≤100)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우는 없다. 비용은 100,000보다 작거나 같은 자연수이다.

출력

N개의 줄을 출력해야 한다. i번째 줄에 출력하는 j번째 숫자는 도시 i에서 j로 가는데 필요한 최소 비용이다. 만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력한다.

예제 입력 

5
14
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
3 5 10
3 1 8
1 4 2
5 1 7
3 4 2
5 2 4

예제 출력 

0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0




#include<stdio.h>

int map[101][101];

int n, m;

int main(){

int i, j,a,b,c;

scanf("%d %d", &n, &m);

for (i = 0; i <= 100; i++){

for (j = 0; j <= 100; j++){

map[i][j] = 2100000000;

if (i == j)map[i][j] = 0;

}

}

for (i = 0; i < m; i++){

scanf("%d %d %d", &a, &b, &c);

if (map[a][b]>c)

map[a][b] = c;

}

for (int k = 1; k <= n; k++){

for (i = 1; i <= n; i++){

for (j = 1; j <= n; j++){

if (map[i][j] > map[i][k] + map[k][j]&&i!=j&&map[i][k]!=2100000000&&map[k][j]!=2100000000)

map[i][j] = map[i][k] + map[k][j];

}

}

}

for (i = 1; i <= n; i++){

for (j = 1; j <= n; j++){

if (map[i][j] == 2100000000)

printf("0 ");

else

printf("%d ", map[i][j]);

}

printf("\n");

}

return 0;

}


i->j까지의 비용과 i->k->j까지 비용을 비교해서 작은값을 i->j 값에 넣는다

n^3의 시간이 걸리고

모든 i j 에 대해서 최소비용을 구할 수 있다.

단 큰 배열크기가 필요함


'프로그래밍 > 알고리즘' 카테고리의 다른 글

kruscal algorithm 크루스칼 알고리즘  (0) 2017.06.14

logparser


사용법

cmd에 입력한다

logparser "Select (추출할 필드 종류 cs-uri-stem,cs-uriquery 등) From (웹로그파일 위치)\*.*(*.*은 모든 파일 확장자 의미) to (저장할 장소 파일 이름) Where (필드 추출 조건 ex: sc-status=500)" -i:(입력되는 파일유형) -o:(결과물을 어떤파일로 추출할 것인가)


예시는 밑에 사이트를 참고

Log Parser Example Queries 
http://logparserplus.com/Examples


출처 : 웹,해킹과 보안

' > 로그 분석' 카테고리의 다른 글

로그 포맷 유형 W3C 로그 확인법  (0) 2016.06.21

+ Recent posts