VC6.0のビルド時のアプリケーションエラー

[戻る]
いも 2013/04/25(木) 20:31:10
あるシステムの保守作業を行っているのですが、ビルドができなくなり困っています。皆
さんのお知恵をお貸し下さい。

開発環境
  WindowsXP SP3
  Visual C++ (R) 6.0 Enterprise Edition

システムの構成
  プロジェクト数              約120ファイル (*.dsp )
  プロジェクト内の総ファイル  約11000 (*.cpp;*.c;*.h;*.rc;*.rh)

上記の構成でビルド時にMSDEV.EXEがアプリケーションエラーを起してビルドできないこ
とが頻発して困っています。 
ビルドをスムーズに行う良い方法ないでしょうか?

アプリケーションエラーが発生しない場合もありますが、一度アプリケーションエラーが
出ると頻発し、半日から1日ビルドを繰り返すことになったりしています。
プロジェクト単位でのビルドは出来るのですが、全部のプロジェクトを纏めたdswからビ
ルドするとアプリケーションエラーになります。

現状はオマジナイとしてPC再起動、*.opt;*.plg;*.ncbの削除後にビルドすると何回目か
にはビルドが出来たのですが、ここ2,3ヶ月でこのオマジナイも効かないようになりまし
た。  (2,3ヶ月の間にファイルの追加等ありました)

VC6からのバージョンアップも可能かとは考えていますが、VC6で駄目な理由をお客様に説
明する必要がありますので、VC6ではNGな理由の書いてあるサイト等も合わせて教えてい
ただけないでしょうか?  (VC6でビルドできればよいのですが)


補足
Google先生に聞いてみたのですが「これ」というものを見つけられませんでした。
下記は少し近いのかなと思いますが、違と考えています。
http://support.microsoft.com/kb/165792/ja
  インストール ディレクトリは"Program Files"なのですが
  ルート ディレクトリには"D:\hoge\hogeV5\src"のようになっているため違かなと考
えています。


よろしくお願いします。

仲澤@失業者 2013/04/26(金) 10:49:15
まず、質問のしかたについて少しアドバイスさせてもらうと。

 A.エラー内容の詳細が提示されないと、誰も答えられません。
 B.ただし、エスパーや嘘つきなどを除く。

ですよね。
通常の人に質問する場合は、通常の手続きとそれなりの情報が必要です。
従って、現段階ではご質問の障害を解決方法を提示できる人はいないでしょう。

次に、構築環境のポーティングに関しては、
以下の様な帰結が導けると考えられます。

 1.VC++6.0は、サポートが停止されてからすでに8年過ぎている。
 2.サーバーOSを除くと、VC++が稼動可能な現行OSは、Xpが唯一であるのだが、
 3.そのXpは来年4月にサポート切れとなり、以降、その構築環境で
  そのまま再構築できる環境が完全に失われる。
 4.つまり、来年以降もそのアプリケーションを再構築するには、
  新しい構築環境(実質的にはVS2008以降)にポーティングする必要がある。
 5.ただし、VS2008は中古を探すしかない。VS2010の新品も
  既に入手困難といえるほど少なくなっている。

【参考】
http://www.microsoft.com/ja-jp/dev/support/tools.aspx
http://support.microsoft.com/lifecycle/?LN=ja&c1=501

尚、

 6.Windows8用ストアアプリを目指す場合はVS2012以降を使用する必要がある。
 7.VS2012は、VC++6.0の自動的なインポートはできないと思われる。

以上、参考にしてみてください。
個人的には、非常にやばい状態にあるとの感想を持ちました。

いも 2013/04/26(金) 14:25:28
仲澤@失業者さん ご意見ありがとうございます。
開発・実行環境のサポート切れを理由に速やかに新しいモノに更新しないとマズイと理解
しました。

現状では来年のXpサポート切れのために、環境の更新は話題に上がっているのですが、そ
の話が纏まるまでの間は何とかできないかと考えての質問でした。
  (極端に申しますと来年4月以降は当システムを利用しない可能性もあります)

  当システムはパッケージを基にカスタマイズを行いお客様に利用していただいて
  います。現行パッケージ版の方はVS2008、Win7での動作は確認していますが、
  パッケージ版と機能の異なるところもあり、当システムを新しい環境に移植するのか
  パッケージ版にカスタマイズした機能をマージするかが決まっていない状態です。


また、質問時のアドバイスありがとうございます。
アドバイスを踏まえて追記させていただきます。

ビルドは全部のプロジェクトを纏めたdsw(hogeall.dsw)を開き、ビルドメニューのビルド
でビルドを開始しています。
アプリケーションエラーの内容は以下になります。
========================================================================
ダイアログ1 (アプリケーションエラーの発生時)
 問題が発生したため、msdev.exe を終了します。ご不便をおかけして申し訳ありま
 せん。

  作業途中であった場合、その情報は失われた可能性があります。

  この問題を Microsoft に報告してください。
  msdev.exeのエラー報告が作成されました。弊社では、この報告を製品の改善に役
  立てるとともに、匿名の機密情報をして扱います。

  エラー報告に含まれるデータの参照:

ダイアログ2 (上記のエラー報告に含まれるデータの参照を選択したとき表示)
      エラー署名
    AppName:msdev.exe    AppVer:6.0.9782.2    ModName:mfc42.dll
    ModVer:6.2.4131.0 Offset:00002895
   詳細の報告
    このエラー報告には、問題が発生した時...
========================================================================

アプリケーションエラーの発生する状況については、常に同じプロジェクト(dsp)の
ビルド中に発生する訳ではないです。
 個人的にはコンパイルする一覧を作成中にアプリケーションエラーが発生するよう
 に感じています。
  ・1つのdspのコンパイルが始まるとリンクまで完了するように感じています。
  ・.hでは変更すると、殆どのcppがコンパイル対象になるものも存在しています。
また、hogeall.dswをダブルクリックしプロジェクトの読み込み中にアプリケーションエ
ラーが発生することもあります。

よろしくお願いします。

仲澤@失業者 2013/04/26(金) 17:30:29
VC自体が落ちるわけですね。

記憶を辿ると、たしかに、当時は良く落ちてましたね(vv;)。
残念ながら解決方法は無いかもしれません。

当時のMFC4.xは、結構バグだらけでした。
大量のメモリーを継続的にかつ、長時間使用すると
すぐに破綻した記憶があります。
単なる憶測になってしまいますが、VCもMFCで作成されている
関係上、そのような問題を抱えていた可能性があります。

従って、依存関係を保ったまま、当該の*.dswをいくつかの*.dswに分割し、
分割した各々の*.dswをそれぞれ別のインスタンスとして起動した
別々のVCのインスタンスで、並列、又は直列にビルドする方法は
やってみる価値があるかもしれません。
案外、現在の一つのdswでビルドするより早いかもしれませんよ。

残念ながら、自分にはこれよりましな回答はできそうもありません。

tetrapod 2013/04/26(金) 17:37:19
OS/VS6 をクリーンインストールしてみるというのはどうだろう。

仮想マシンに XP をインストールして
その XP に SP3 と最新パッチを当てて
その XP 上に Visual Studio 6.0 をインストールして
Visual Studio 6.0 ServicePack 6 を必ず当てて
その上で当該プロジェクトを build

これでうまくいくようなら XP のサポート期限が切れても当面困らないと思う。

乗り換え推奨なのは間違いないが。

みい 2013/04/26(金) 19:17:28
VC6で大きなプロジェクトの時は、メモリ不足のエラーが出たり
VSが落ちたりしたら常駐ソフト全部落としてコンパイルしてました。
最後はサービスまで停止させたりして…。
今はCLIのデザイナ表示で泣きを見てます(^^;)

akey 2013/04/30(火) 10:34:01
以前、同様な状態になったことがあります
...が120プロジェクトは未知です。

当時の軽減策として・・
・プロジェクト数を減らす
 (プロジェクトの統合やワークスペース分離)
・ファイル数を減らす
 (ファイルの統合や不要コード破棄)
・ビルド環境のパスを短くする
 (要は"D:\hoge\hogeV5\src"この部分を短くする)

私も乗り換え推奨です

いも 2013/04/30(火) 13:08:48
仲澤@失業者様、tetrapod 様、みい様、akey様

ご意見ありがとうございます。
3連休をいただきネット環境のない生活をしていたために返事が遅れ申し訳ありません。

仲澤@失業者様
 hogeall.dswを hogeall_1.dsw,hogeall_2.dsw hogeall_3.dsw 等に分割してみればと言
う事ですよね。dswを開く手間が掛かるため(ビルド完了の監視等)にhogeall.dswに拘って
いましたが、最近はマシンの高性能化でビルド時間も短くなっているので試させて頂き
たいと考えます。

tetrapod様
 ビルドするマシンはビルド専用で、お客様先に設置してあり簡単に再インストールので
きる環境ではありませんので試せそうにありません。折角ご意見を頂いたのに申し訳
ありません。 (特定の1台が作成したDLL,EXEを配布できるという考え方で運用しています)

みい様
 常駐タスク、サービスの停止ですね。今までのオマジナイにプラスでやってみます。
 CLIのデザイナを利用するようなプロジェクトの経験はありませんがご苦労察し致します。

akey様
 「プロジェクト数を減らす」 = hogeall.dswの分割と理解いたします。
 多分、120プロジェクトは多いので、ファイル数の削減(統廃合)と同様にプロジェクトの
統廃合もしよう とのご意見だとは思いますが、大鉈は振るいたくないのが正直なところ
です。

MSのサイトにVC6では発生するけど、VS2005以降では解消されたとかあれば喜んでVS2008
にしましょうとお客様に言えるのですが、あと1年後にはシステムの更新があるためにお
客様を納得させずらく、dswの分割が最善の案なのかもしれません。
(VS2008も古いことは承知しておりますが、パッケージ版が2008なので)

システムの更新は以下のどちらかになると思います。
 ・最新パッケージに独自のカスタマイズをマージ(VS2008で作業)
 or
 ・既存システムに最新パッケージの新機能をマージ (このときもVS2008での作業にな
るはずです)

もう少し、他の方のご意見も待ちたいのでまだ解決とせずにおきます。

紅' 2013/05/01(水) 15:41:34
こんにちわ。
自分だったらですけれど。

1. デフラグ&ディスクチェックの実施、OS のページングファイルを作成しなおしてみる
2. コマンドラインからビルドするスクリプトを組む
3. OS のセーフモードでビルドしてみる
4. 他の PC に環境を作成して同じ構成をビルドして比較してみる
5. VC だけでもインストールしなおす
6. ビルド環境を再構築する許可が得られなかったことを証拠に残してあきらめる

2 は作業の単純化と、それによる複雑なビルド手順を実現しやすくするため。
スクリプト内で何をしてようと操作する側は1回ダブルクリックするだけで
済むことから、ビルド単位の小型化が容易にできるようになります。

3 と 4 は問題点の確認のため。
セーフモードでビルドできたか覚えてませんが、
出来るのであれば不要な常駐系プログラムがない状態でビルドすることができます。

5 は、自分だったら「ビルドができるかどうかわからない」
→「ビルドの生成物が信用できるかわからない」環境での実行ファイルの作成は
怖くてできません。
仮にビルドに必要な VC や OS の何らかのファイルが壊れていた場合、
それを利用して作られた実行ファイルに責任をとれないからです。

だから、自分なら、ビルド予定のないときに現行環境のバックアップを取得した上で
最低でも VC の再インストールができるように交渉すると思います。
その上で、正常にビルドできるようになったら定期的にバックアップを
取ってもらうようにするかな。

akey 2013/05/02(木) 10:43:06
[訂正]
× 私も乗り換え推奨です
○ 構成の見直し推奨です
乗り換えのみで改善するかは不明でした。

ついでに書き足し・・
当時、技術情報など調べましたがそれらしい情報は見つけられませんでした。
(VC6より後のバージョンで改善されたという情報も)
軽減策の効果があったことより、IDEがコンパイルやリンカ用にキャッシュしているデー
タの上限を迎えたと推測し、分離や削減で対応した。

いも 2013/05/07(火) 12:17:23
紅'さん
 問題が発生したときの対応方法というか仕事のやり方を教えていただきありがとうござ
います。今後、問題が発生した場合の場面で利用させていただきます。
akey さん
 当時の技術情報をお調べ頂きありがとうございます。

皆様、色々なご意見ありがとうございました。
下記のような対策をし、一応解決とさせていただきます。

パッケージ版は私が保守しているシステムよりもファイル数とプロジェクト数は多いので
すがVS2008のためか、今回発生しているビルド時のアプリケーションエラーは発生してな
いように感じています。
VC6では何かの上限を超えるような事が起きていたのがVS2005以降では起き難くなった又
は改善されたのだと思っています。(本当に思っているだけでなんの根拠もありません)

皆さんからご教示していただいたことを全て試せば良いのですが(本来ならばその結果ど
うなったかも書き込むべきとは思います)、今回はhogeall_1.dsw ,hogeall_2.dsw,
hogeall_3.dsw 等に分割する方法で対応しようと思います。
今のところhogeall.dswではVC6が落ちるがhogeall_1〜4までに分割したところ落ちないよ
うになりました。

いも 2013/05/07(火) 12:48:03
[[解決]]
解決にチェックするのを忘れていました。

古いスレッドには追加発言できません。