2. C言語 - LLDB - デバッグしてみる

 
2.1 ソース
2.2 Makefile
2.3 デバッグしてみる

2.1 ソース

/home/hogehoge/lang/cpp/ncurses/ncurses.c
 というソースを作成して、以下のように記述しました。

#include <limits.h>
#include <locale.h>
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
	char *term;

	int cols, lines;

	WINDOW *win;

	setlocale(LC_ALL, "ja_JP.UTF-8");
	term = getenv("TERM");

	if (setenv("TERM", "vt100", true) != 0)
	{
	        printf("\n端末の設定に失敗しました。\n\n");
	        return 0;
	}

	initscr();

	win = newwin(LINES, COLS, 0, 0);
	keypad(win, 4);
	noecho();
	nodelay(win, true);
	halfdelay(10);

	while(true)
	{
		bool bbreak = false;

		char  atime[LINE_MAX] = {};

		struct tm stm = {};

		int y = LINES / 2;
		int x = COLS / 4;

		localtime_r(NULL, &stm);
		asctime_r(&stm, atime);

		werase(win);

		mvwprintw(win, y-1, x, atime);
		mvwprintw(win, y++, x, "何かキーを入力してください ");
		mvwprintw(win, y++, x, "終了するには e を入力します ");

		wrefresh(win);

		int n = wgetch(win);

		switch (n)
		{
		case 'e':
		case 'E':
			bbreak = true;
			break;

		default:
			break;
		}

		if (bbreak != false)
		{
			break;
		}
	}

	werase(win);
	wrefresh(win);
	delwin(win);
	endwin();

	setenv("TERM", term, true);

	return 0;
}

2.2 Makefile

 Makefile は以下のように作成しました。

CC	= clang

target	: ncurses.o Makefile
	$(CC) -O0 -g -o ncurses ncurses.o -lncursesw

.c.o	: Makefile
	$(CC) -O0 -g -c $< -o $@

 とりあえず、最適化なし、デバッグシンボルを作成ってことです。

2.3 デバッグしてみる

 実行すると

> ./ncurses
セグメントエラー(coreを出力しました)
 てなことになっちゃうのでデバッグしてみるのです。