본문 바로가기

전체 글

(711)
Segmentation fault 상황 사례 [1. 개요]아래 세그멘테이션 폴트 사례는 오염 된 포인터 변수에 접근 시 발생함.엄밀하게 말하면 스택 오버플로우가 아니기 때문임.[2. 예제]#include #define MAX_LEN 5struct A { int arr[MAX_LEN]; int len;};class MyContainer {private: // 메모리 배치를 고려하면... A first; const int *bptr; const char *cptr; const float *dptr;public: MyContainer() { first.len = 0; bptr = new int[MAX_LEN]; cptr = new char[MAX_LEN]; dp..
리눅스. 스택 크기에 관한 고찰 [1. 개요]Segmentation fault 와 관련하여 고민한 내용 정리[2. 상황]특정 함수 진입 시, c++ 로 작성한 애플리케이션이 segmentation fault 발생과 함께 죽는 현상.gdb 로 디버깅 시, 함수 진입 만 하였는데, segmentation fault 가 발생. 의심이 것 중 하나는 스택 오버플로우..[3. 예제] 1 #include 2 3 4 void myfunc() 5 { 6 char arr[MYSZ * 1024 * 1024]; 7 std::cout  ulimit -s 가 8192 (8 Mbyte 인 경우)g++ main.cpp -g -DMYSZ=9g++ main.cpp -Wl,-z,..
gdb 사용 방법 (기초) [1. 개요]리눅스 C++ application 디버깅 시, 유용한 툴 인 gdb 의 기초적인 사용 방법을 정리한다. 기본적으로 breakpoint 를 걸고, 한줄 단위로 실행해보기 위해서 디버깅 심볼들이 필요하다.따라서, CMake 기준에서는최적화를 많이 하는 Release 빌드 보다는 Debug 빌드가 적합하다.아래와 같이, gdb 실행 시 심볼들을 찾을 수 없다는 메시지가 출력 된다. g++ 로 직접 빌드하는 경우라면, -g 옵션을 사용하고, 최적화는 하지 않도록 한다.[2. 기본적인 실행] 1 #include 2 3 int sum(const int a, const int b) 4 { 5 const int aa = a*a; 6 ..