ビルドエラーと実行時エラーの区別が付かない?

最近感じることですが、IDEが便利になったせいか、ビルドエラーと実行時エラーの区別がつかない人が増えているようです。もう少し具体的にいうと、Visual Studioの場合、コーディングを行うとすぐにCTRL + F5で実行させようとします。IDEは、ビルドを実行し、ビルドに成功すればデバッグなしで実行するわけですが、この過程でエラーが発生すると、単に「エラーが出た!」というだけの認識しか持たず、どんな過程でどんなエラーが出たのかを確認しようとしないのです。

仮に実行時エラーだということが理解できても、CTRL + F5でデバッグなしで実行するものですから、デバッガで調べようという発想がありません。ブレークポイントやステップ実行を教えてあげると、驚くほど感動されたりします。デバッグなしで実行するのは、おそらく、デバッグ開始にすると、コンソールアプリケーションではプログラム終了時にコンソールが閉じてしまうために、そういう指導を受けたのではないかと思います。

ビルドエラーについても、それが翻訳過程のどこでエラーになっているかなど、おそらくは理解できないはずです。せめてもう少し大雑把に、プリプロセスでエラーになったのか、(狭義の)コンパイルでエラーになったのか、リンクでエラーになったのかぐらいは理解して欲しいものです。そうでないと、自分でエラーを適切に修正することができません。結果的に、でたらめな修正を繰り返し、コンパイラが黙った時点で「問題解決!」と事実誤認したりするわけです。

このように書くと、ベテランの人からは「うんうん」と合意されたりするのですが、ベテランであってもC++のテンプレートに関する不具合については似たような状況になることが少なくないようです。C++のテンプレートにバグがあっても、デバッガでステップ実行したりすることができませんから、展開過程のログがエラーメッセージという形で出力されるわけですが、これを「ワケのわかならないエラーメッセージが大量に出た!」で済ませてしまうベテランも多いのです。

どんなに読みにくくても、どんなに不親切であっても、問題解決の糸口となる情報は見逃さないようにしたいものです。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/653

_

デバッグ、っていう科目があればみんなできるようになりそうです(笑
僕も友人にVisualStudioのステップ実行をして、ブレークポイントで各変数の値が分かるよーとか教えると感動されます。
というか専門学校の生徒だと、英語のエラーメッセージが読めない人もいて、これからどうするんだろう・・・って思いますね。

デバッグはもっとちゃんと出来るようになりたいんですが、独学で、っていうのがやりにくい分野だと思います。
Junitを使ったテスト実践、なんて科目も欲しいです。

>よければ、どんな単語がわからなかったのか教えてください。
組込みを勉強したことはなかったので、参考にはならないかと思いますが一応回答させていただきます。
とりあえず一番メジャーらしいOSのuITRONが分からなかったり、というかリアルタイムOS?コールバック?って感じでした。利用したことがないと掴みづらい。
だから組込み特有の単語であったり、ハードに近い機能だと分からなかったですね。
あとはJavaを使ってると、メモリの扱いが難しかったり。
(バイトオーダーぐらいは知っていましたが。)

やはり理解できないのに一番の理由は組込みソフトウェアのイメージが全くないからです。対象外なのでしょうがないんですけどね。
前半(特に一章)のC++については、CとC++の互換性についてが、普通の文法書とは違いC→C++と文法をさらってきた僕にはとても勉強になりました。
3章になると、さっぱりでした。

コメントありがとうございます。

> というか専門学校の生徒だと、英語のエラーメッセージが読めない人もいて、これからどうするんだろう・・・って思いますね。

それはいえます。
まあ、日本語で出てもメッセージを読めない人は読めないのですが...

> デバッグはもっとちゃんと出来るようになりたいんですが、独学で、っていうのがやりにくい分野だと思います。

独学だと、10年ぐらいやっているベテランでも、デバッガの使い方を知らない人がいたりして、驚くことがあります。
それとは別に、デバッガが使えるスキルはあっても、デバッガを使える環境がないために、シリアルポート1本だけでデバッグしていたり、ROMエミュレータだけで開発しているような人も見たことがあります。

> >よければ、どんな単語がわからなかったのか教えてください。

↓こちらにリンクを貼っておかないとわからなくなりますね。
http://tsizu.blog45.fc2.com/blog-entry-61.html#comment49

> とりあえず一番メジャーらしいOSのuITRONが分からなかったり、というかリアルタイムOS?コールバック?って感じでした。利用したことがないと掴みづらい。
> だから組込み特有の単語であったり、ハードに近い機能だと分からなかったですね。

なるほど。この辺はわかることが前提になっていますね。
これから組込みに手を出そうという人は、例外もありますが、まずはCを使うでしょうから、C++の本ではそのあたりの説明はあまり丁寧には行いませんでした。
必要なら、『組込み現場の「C」プログラミング 基礎からわかる徹底入門』でも読んでもらえばよいことですから。あるいは『組込みエンジニアのための C/C++プログラミングのヒント』でもよいかと。

このエントリーを含むはてなブックマーク