Linux環境での開発と操作のヒント

はじめに

Linuxは、特にプログラミングやシステム開発において非常に強力なオペレーティングシステムです。ここでは、Linux環境(特にNOI Linuxなど)での開発ワークフロー、基本的な操作、そしてVimエディタの設定に関するヒントを紹介します。

基本的な操作

ファイル管理

  • デスクトップへのファイルのドラッグ&ドロップ:ファイルをデスクトップの上部領域にドラッグすることで、ショートカットのようにアクセスできます。
  • 削除:ファイルを削除するには、Alt + 右クリックメニューから選択します。

ターミナルコマンド

  • ディレクトリの移動:デスクトップに移動するには、cd Desktopと入力します。
  • ファイルサイズの確認size filenameコマンドでファイルのサイズを確認できます。
  • ソフトウェアのインストール(例:Firefox)
    sudo apt-get install firefox
  • ソフトウェアのアップデート
    sudo apt install --only-upgrade firefox

C++開発ワークフロー

ファイルの作成と編集

新しいC++ファイルを作成するには、ターミナルで以下のコマンドを実行します。

vim my_program.cpp

Vimは「普通モード」と「挿入モード」の2つの主要なモードで動作します。起動時は普通モードです。コードを書き始めるには、iキーを押して挿入モードに切り替えます。編集後、Escキーで普通モードに戻ります。

コンパイルと実行

  • コンパイル:C++ファイルをコンパイルするには、GCCコンパイラを使用します。
    g++ my_program.cpp -o my_program

    コンパイルオプションを追加することもできます。例えば、メモリリークや未定義動作の検出、厳しい警告レベルを有効にするには:

    g++ my_program.cpp -o my_program -O2 -Wall -Wl,--stack=112345678 -fsanitize=address -Wshadow -std=c++17
  • 実行:コンパイルが成功すると、生成された実行ファイルを実行できます。
    ./my_program

Vimエディタの設定と使い方

.vimrc設定ファイル

Vimの動作をカスタマイズするには、ホームディレクトリに.vimrcファイルを作成します。

set tabstop=2      " タブ幅を2に設定
set shiftwidth=2   " 自動インデント幅を2に設定
set autoindent     " 自動インデントを有効化
set cindent        " C/C++スタイルの自動インデントを有効化
set ruler          " ステータスラインにカーソル位置を表示
set nu             " 行番号を表示

" 一括選択:G(行末) -> v(ビジュアルモード) -> gg(行頭)
" インデントの修正:Ctrl+V, G, =

" キーマップの例:F9キーでコンパイル&実行
nnoremap <F9> :call BuildAndRun()<CR>
func! BuildAndRun()
  exec "w"          " ファイルを保存
  exec "!clear"     " ターミナルをクリア
  exec "!g++ % -o %< -fsanitize=address -ftrapv -Wall -g"
  exec '!\time -f "time : \%U memo : \%M" ./%<'
endfunc

" キーマップの例:F12キーでターミナルをクリア
nnoremap <F12> :call ClearTerminal()<CR>
func! ClearTerminal()
  exec "!clear"
endfunc

これらの設定は、Vimの普通モードでコマンドライン(:で開始)に入力することでも一時的に適用できます。

Vimチュートリアル

Vimの基本操作を学ぶには、ターミナルでvimtutorを実行してください。これは対話式のチュートリアルで、Vimの基本を網羅しています。

高度なツールとテクニック

makeとMakefile

複数のファイルを扱うプロジェクトでは、makeを使用するとビルドプロセスを自動化できます。プロジェクトルートにMakefileを作成します。

# Makefileの例
TARGET = my_program
SOURCES = my_program.cpp

CXXFLAGS = -Wall -std=c++17 -g -fsanitize=address -ftrapv

$(TARGET): $(SOURCES)
	$(CXX) $(CXXFLAGS) -o $(TARGET) $(SOURCES)

clean:
	rm -f $(TARGET)

この設定では、make my_programコマンドでコンパイルが実行され、make cleanで実行ファイルが削除されます。

デバッグ(GDB)

プログラムのバグを特定するには、GDBデバッガが役立ちます。

g++ my_program.cpp -o my_program -g  # デバッグ情報を含めてコンパイル
gdb my_program                      # GDBを起動

(gdb) b 6                           # 6行目にブレークポイントを設定
(gdb) r                             # プログラムを実行
(gdb) p variable_name               # 変数の値を表示
(gdb) q                             # GDBを終了

パフォーマンス測定(time)

プログラムの実行時間とメモリ使用量を測定するには、timeコマンドを使用します。

\time -f "time : \%U memo : \%M" ./my_program

出力される%Uはユーザー時間(CPU時間)、%Mは peak メモリ使用量(KB単位)です。

システム設定(ulimit)

プログラムが使用できるスタックサイズを変更するには、ulimitコマンドを使用します。

ulimit -a        # 現在の制限を表示
ulimit -s 102400 # スタックサイズを100MBに設定

コンパイラフラグ

  • -fsanitize=address:メモリリークやバッファオーバーフローを検出します。
  • -fsanitize=undefined:未定義動作(UB)を検出します(一部環境では制限あり)。
  • -ftrapv:整数オーバーフローを検出します。
  • -g:デバッグ情報を含め、addr2lineなどのツールでソースコードの行番号を特定できるようにします。

ファイル比較(vimdiff)

2つのファイルの差分を表示するには、vimdiffコマンドが便利です。

vimdiff file1.txt file2.txt

タグ: linux Vim GCC gdb Makefile

7月12日 16:52 投稿