投稿

9月, 2010の投稿を表示しています

オリジナルでは発見されないバグ

MFC版のソフトウェアをQt版へ移植する際、 驚いたのは2個重大なバグが発見されたこと。 それも普通に実行して止まるのである。 ところがそのコードはC++で.hや.cc(.cpp),.cを含め、 800個以上(ちなみに全てをGoogle C++ Styleに変更中)の ソースファイルだが8年以上MFC で動作していたものだ。 それがQt版となり、メモリアロケーションの位置が変わったために、 発見できたのである。  ここには我々がおこなっている、 テストに問題が存在するということを証明している。 尚、バグは以下ことがらだった Bitmapのメモリ算出でバグがあり、メモリオーバーランしていた。 rectの初期化を忘れいた。 さて、これを自動に発見させるにはどう対処したらよいか。。。

QtとMFC

MFCからQtヘ移植する際、戸惑うのは。。。  CObjectとQObject     これらは、見た目は同じようだが内容は、まったくことなる。 CObjectはオブジェクトの型チェックやシリアライズを提供するもの。 QObjectは、誤解を恐れずに書くとOSのプロセス管理とおなじような機能がある。 したがって、移植する際は注意するべき。  なお、最近はまったのはQThreadとCWinThread、両者はともイベント(メッセージ)キューをもち、イベント(メッセージ)ループがあるが、Notifyの方法がことなる。 前者はsignal and slotを使い、後者はMessageを使う。 その際、connectのsignal  and slot関数の引数部はQtのプリミティブな型しか受け付けないので注意すること、たとえば移植移行期にはWPARAMやLPARAMなどを使って試すと思われるが、slotを呼んでくれない。 しかも、コンパイルエラーや実行時にエラーメッセージなどは表示されない。 ただ、呼ばないのである。 (補足:これは出来るだけ アプリケーションが強制終了 しないようにと考慮されているため)