g ++とgdbの使用を開始するための優れた「ハウツー」または「開始」ガイドはありますか?
いくつかの背景。まともなプログラマーですが、これまでのところ、私はVisualStudioのWindowsですべてを行ってきました。
私は、ターミナルを使用してファイルをコンパイルした経験が少しあります(.hおよび1または2 .cppをはるかに超えていません)。しかし、それ以上のものはありません。
Linuxでコーディングを開始する方法についての優れた入門書を知っている人はいますか?
g ++とgdbの使用を開始するための優れた「ハウツー」または「開始」ガイドはありますか?
いくつかの背景。まともなプログラマーですが、これまでのところ、私はVisualStudioのWindowsですべてを行ってきました。
私は、ターミナルを使用してファイルをコンパイルした経験が少しあります(.hおよび1または2 .cppをはるかに超えていません)。しかし、それ以上のものはありません。
Linuxでコーディングを開始する方法についての優れた入門書を知っている人はいますか?
Advanced Linux ProgrammingやAdvanced Unix Programmingなどの優れた本を読んでください。Linux Documentation Projectの高度な bash スクリプト ガイドとその他のドキュメントもお読みください。
明らかに、ラップトップに Linux ディストリビューションをインストールします (一部の VM ではなく、実際のディスク パーティションにインストールします)。Debian のようなディストリビューションがある場合は、それを実行aptitude build-dep gcc-4.6 gedit
して、多くの興味深い開発者向けパッケージを入手してください。
コマンドラインのスキルを学びます。man
コマンドの使い方を学びます。manpages
およびmanpages-dev
パッケージをインストールした後、入力しますman man
(スペースバーを使用して「テキストをスクロール」し、q
キーを使用して終了します)。intro(2)の man ページもお読みください。cp
tryなどのコマンドの使い方を忘れたときcp --help
。
1 人の小さなプロジェクトであっても、gitのようなバージョン管理システムを使用してください。
ファイルをバックアップします。
Linux、カーネル、syscalls、フリーソフトウェア、X11、Posix、Unixに関するウィキペディアの関連ページをいくつか読んでください。
コマンドラインを使って頑張ってください。たとえば、コマンド ラインですべてを 1 週間以上実行してみてください。デスクトップや、場合によってはマウスを使用しないでください。使い方を学ぶemacs
。
GNU makeなどのビルダー プログラムについて読む
ソース コードから (たとえば、 sourceforge、freecode、またはgithubから)いくつかのフリー ソフトウェアを取得し、ビルドとコンパイルの練習をします。ソースコードを調べる
コマンドライン(ターミナル)で開始するための基本的なヒント(コマンドが見つからない場合は、それを提供するパッケージをインストールする必要があります)。
実行しemacs
ます。チュートリアルメニューがあります。30分練習します。
helloworld.c
プログラムを編集する(main
何らかのhello
関数を呼び出す)
でコンパイルしgcc -g -Wall helloworld.c -o helloworld
ます。警告が表示されなくなるまでコードを改善してください。ほとんどすべての警告を常に or に-Wall
渡しgcc
ます。g++
で実行します./helloworld
でデバッグしてgdb ./helloworld
から
help
コマンドを使用するb main
にブレークポイントを追加します。main
hello
gdb
を使用して実行しますr
bt
バックトレースを取得するために使用しますp
いくつかの変数を出力するために使用しますc
デバッグされたプログラムの実行を続行するために使用します。を使用してプログラムをMakefile
構築できるように、小さなものを書きますhelloworld
make
Emacs 内から( make
with M-x compile
) およびgdb
(with )を呼び出す方法を学ぶM-x gdb
valgrindの詳細を確認してください(ほとんどのメモリ リークを検出するため)。おそらく、アプリケーションのいくつかでBoehm の GCを使用することを検討してください。
学ぶべきことがたくさんあります。詳細は説明しませんが、数十年にわたって unix および c/c++ の開発を行ってきた者として、いくつかのトピックから始めようと思います。
私の主なアドバイスは、実験を開始することです。C または C++ でできるだけ単純なプログラムを作成し (「Hello there, world!」と出力するのが伝統的です)、それをコマンド ラインからコンパイルして実行する方法を理解します。次に、コンパイルされたバージョンを取得したら、デバッガーで起動し、ブレークポイント、式の出力などを試します。この最も単純なプログラムを起動して実行し、デバッガーが何であるかをある程度理解したら、クラス、関数、構造体、またはその他の良い小さなステップと思われるものを追加して、サイクルをもう一度実行してください。この方法では、非常に大きなプログラムから開始する場合よりもはるかに高速に処理を進めることができます。
まだ非常に高いレベルですが、少なくとも少し理解する必要があるいくつかのトピックを以下に示します。「小さく始めて学ぶ」アプローチは、以下のトピックのいずれにも適していることに注意してください。
g++
: コマンド ライン構文に関する非常に優れたオンライン ドキュメントが用意されています。Vim
とemacs
は伝統的 (そして非常に強力) ですが、どちらも比較的急な学習曲線を持っています。助けてくれる人がそばにいるなら、それはとても良いことです。他にも選択肢はありますがemacs
、私自身ユーザーとして、残念ながらそれらに精通していません。gdb
ください。これは、プログラムを理解するための非常に強力なツールです。繰り返しになりますが、詳細な読書に報いる広範なオンライン ドキュメントがあります。ls
ますcd
。grep
ソースファイルをすばやく検索します。プロジェクトが複数ファイルの場合、特に全学期のプロジェクトの場合は、次のトピックについて学習することも検討してください。
Make
は、複数ファイルのプロジェクトをコンパイルおよびリンクする方法を説明するためのツールで、毎回手動で行う方法を覚える必要がありません。 Make
は、残念ながら使いにくいという評判がありますが、これは、複数のディレクトリにまたがる非常に大規模なプロジェクトにほとんど当てはまります。git
またはなどのソース コード管理システムを利用することを強く検討します。hg
すばやくバックアップできるように、行ったことのアーカイブ バージョンを保持しておくと、はるかに安全です。git
とは両方ともhg
、小規模な 1 回限りのプロジェクトにはやり過ぎですが、単独で学習する価値があります。今日私が理解している従来の知恵は、それらは哲学とコア機能が非常に似ているということですがhg
、コマンドラインレベルでは間違いなく少し一貫しているため、開始するのが簡単です.これはかなり威圧的だと思います。特に、以前に UNIX コマンド環境に実際に触れたことがない場合はなおさらです。上記の最初のアドバイスをもう一度強調します。単純なことから始めて実験することから学びましょう。これにより、特定の時点で頭を悩ませなければならない新しいものの量が最小限に抑えられます。