본문 바로가기

unix

(18)
GDB를 이용한 디버깅 출처:http://coffeenix.net/doc/develop/gdb.html GDB를 이용한 디버깅 GNU 소스-레벨 디버거 Fifth Edition, for GDB version April 1998 Richard M. Stallman and Roland H. Pesch초벌 번역 : 정강훈 차례 GDB 개요 자유 소프트웨어 GDB 공헌자들 간단한 GDB 세션 GDB에 들어가고 나가기 GDB 실행 파일들 선택하기 모드 선택 GDB 종료하기 Shell 명령어들 GDB 명령어들 명령어 구문 명령어 완성 도움말 얻기 GDB에서 프로그램 실행시키기 디버깅을 위한 컴파일 프로그램 시작하기 프로그램 인자들 프로그램 환경 프로그램 작업 디렉토리 프로그램 들어가고 나가기 이미 실행되고 있는 프로세스 디버깅 자식 프로..
[링크] 파일 옵샛 http://forum.falinux.com/zbxe/?document_srl=519546
C 사용자를 위한 C++ 원문 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C++/Documents/CPP_Programing_for_Cprogramer C 사용자를 위한 C++ 윤 상배 yundream@gmail.com 차례 1절. C프로그래머를 위한 C++ 1.1절. 새로운 include 방법 1.2절. 라인단위 주석사용 1.3절. 간단하게 사용할수 있는 입출력 스트림 1.4절. 변수선언 위치제한 1.5절. 전역변수와 지역변수의 동일이름 사용 1.6절. 변수의 상호참조가능 1.7절. namespace 의 선언 1.8절. inline 함수의 사용 1.9절. 예외처리 1.10절. default 인자사용 가능 1.11절. Parameters Overload 1.12절. Ope..
makefile 만들기 컴파일 작성한 코드에 구문검사를 해서 구문에 이상이 있다면 오류를 내주어 작성한 유저에게 알려주고 만약 검사에 이상이 없다면 프로그램이 시작되기 전에 메모리에 올라간다. 이처럼 컴파일의 역할은 유저가 작성한 코드에 이상이 없는지 검사하고 코드에 작성된 변수나 함수들을 메모리에 올려주는 역할을 한다. 링크 프로그램을 만드는 마지막 작업이 바로 링크(Link)라는 과정이다. 필요한 조각들을 모두 모으거나 어떤 부분이 빠져 있는지 알아보기 위한 과정이다. 정적 라이브러리(Static Library)를 사용할 때, 링커는 프로그램이 필요로 하는 부분을 라이브러리에서 찾아서 그냥 실행파일에다 카피해버린다. 공유 라이브러리(또는 동적 라이브러리)의 경우에는 이렇게 하는 것이 아니라 실행파일에다가 단지 "실행될 때 ..
Chapter 18. 메모리 할당과 해제 Chapter 18.메모리 할당과 해제 시스템으로부터 메미로를 할당 받는다는 것은 시스템에서 사용하고 있지 않은 메모리 영역을 배정받고 이에 대한 주소를 얻는 것이다. 동적 메모리는 "절대" 변수를 통해서 접근할수없다. 포인터 변수에 의해서만접근이 가능하다. 포인터 변수에 의해서 접근할 수 있는 영역은malloc()에 의해서 생성될 수 있다. C 프로그램에서의 메모리 구조는 다음과 같다. 1. 텍스트 영역(TextSegment) CPU에 의해서수행되는 기계어 명령어들이 모여 있는 곳을 지칭한다. 2.초기화된 데이터 영역(Initialized Data Segment) 프로그램에서 초기화된 데이터 들이 모여 있는 장소이다. int imsi = 100; 3.비 초기화된 데이터 영역(Uninitialized D..
Chapter 17. 구조체와 포인터 Chapter17.구조체와포인터 구조체의 정의하면 다음과 같이 2가지로 말할 수 있겠다. 변수들이 모여 있는 집합체이다. 변수들은 다른 타입을 가질 수 있다. 이 집합체는 논리적으로 관련이 있으며 하나의 이름으로 통칭한다. 사실 구조체를 사용하지 않고 배열을 사용할 수도 있다. 하지만, 구조체를 사용하면 변수들이 논리적으로 하나가되기 때문에 인식하기가쉽고 프로그래밍을 하기도 편하다. 구조체와 배열의 차이 주소록에는 이름과 생년월일, 주소, 전화 번호 등이 포함되어 있다.이를배열로 표현하면 아래와 같다. char name[20],address[100], birthday[11], phone[15]; 위의 배열 정의는 한 사람만 저장할 수 있으며, 만약 50명을 저장하려 한다면 2차원 배열을 이용해야 한다. ..
Chapter 15. 함수 인자 포인터 Chapter 15.함수 인자 포인터 함수에 인자 넘기는 포인터는 지칭한다. 이것을 잘 모르면변수를 잘 정의하고 사용할 지라도 다른 함수에 넘길 수 없기때문에 현재의 함수 안에서만 포인터 변수를 사용하게 될지도 모른다. 1차원 함수 인자 포인터 15_1.c #include main() { void add(int *); int imsi; imsi = 100; add(&imsi); printf("imsi : %d\n", imsi); } void add(int *imsi) { *imsi = 1024; } gcc-o 15_1 15_1.c ./15_1 imsi : 1024 위 프로그램은 포인터를 다른 함수에 넘기기 위해서 어떻게 함수의 원형을 선언하고 본체는 어떻게 작성해야 하는지 그리고 호출할 때 주의할 것은 ..
Chapter 16. 함수 포인터 Chapter 16.함수 포인터 함수를 가리킬 수 있는 포인터!! 많이 사용되지는 않지만 수치해석과 같은 분야에서 함수 포인터가 없다면 상당히 프로그램이 복잡해짐을 느낄 수 있을 것이다. 트리를 순회하는데 재귀함수 기능이 없다면 구현에 훨씬 많은 시간과 노력이 필요할 것이다. 함수 포인터의 개념과 기본적인 활용에 대해 간단히 짚고 넘어가자. 함수 포인터의정의 type (*name)(arg list); "name"은 함수를 가리킬 수 있는 포인터 변수이다. 그러므로name에 대한4byte가 할당된다. "type"은name이 가리키는 함수가 리턴하는 형(type)을 말하고,"arg list"는 name이 가리키는 함수의 매개변수 리스트이다. int (*imsi)(int, char *); imsi가 가리키는 ..