2016-05-11 16 views
-1

リリース設定でコードがクラッシュしていますが、デバッグ設定でクラッシュしています。私はプログラムを最後の行の 'return(0);'で終了するだけです。実行します。私はVisual Studio開発環境で作業しています。クラッシュすると、VS Studioはコードをデバッグするオプションを提供します。 0xc0000005で:アクセス違反読み取り場所0xFFFFFFFFFFFFFFFFのmyapp.exeで0x00007FF851A0512D(msvcp120d.dll)でmsvcp120d.dllのためにリリースバージョンがクラッシュする

未処理の例外:私はそれを選択すると、それは言ってポップアップ表示エラーダイアログにつながります。

この例外が発生したとき、私は 'ブレーク' を選択すると、それはXSTRINGファイルに次の関数をハイライト:

void _Free_proxy() 
    { // destroy proxy 
    typename _Alloc::template rebind<_Container_proxy>::other 
     _Alproxy; 
    this->_Orphan_all(); 
    _Alproxy.destroy(this->_Myproxy); 
    _Alproxy.deallocate(this->_Myproxy, 1); 
    this->_Myproxy = 0; 
    } 

そして、特に、ライン「_Alproxy.destroy(この - > _がmyProxy ); '犯人として強調されています。

「リリース」コードが何らかの形で「デバッグ」msvcp120d.dllライブラリにリンクしている可能性があると思っていたのですが、それは最初のダイアログでハイライト表示されています。デバッガはこの問題を識別します。しかし、それが問題であっても、リリース構成ではmsvcp120.dllでコンパイルし、デバッグ構成ではmsvcp120d.dllをコンパイルするようVSに指示する方法は不明です。

(記録のために、リリース構成の 'マルチスレッドDLL(/ MD)'フラグとデバッグ構成の 'マルチスレッドデバッグDLL(/ MDd)'を使用して、 )

キッカーは、リリースバージョンがクラッシュするとプロセスが「中断」状態になり、タスクマネージャーを使用してプロセスを完全に終了できないということです。そして、私はコンピュータを再起動せずに新しいリリースバージョンを再コンパイルすることすらできません!

この問題を特定する方法はわかりません。どのように私はこれを修正するかもしれないかについて誰かに助言することができますか?


更新

このプロジェクトのコードは非常に大きいです - ので、同じ挙動を示す最小限のバージョンにそれを蒸留し、通常のバグを追跡するための有効な方法は、非常に大きな課題になりつつ、 。プロセスをログに記録し、どちらがmsvcp120d.dll @ Niallを呼び出しているかを把握する方法があることを期待していました。依存グラフを生成しました。独自のものをすべて譲渡せずに、グラフを全体的に見ることができます。
Dependency graph of entire solution msvcp120d.dllを呼び出すツールはありますか?

+0

コードに未定義の動作があるようです。あなたは展示物に[mcve]を同じ挙動にすることができますか? – NathanOliver

+2

あなたまたはあなたの依存関係のいずれかがmsvcp120d.dll(ランタイムのデバッグバージョン)をリリースビルドにリンクしています。ランタイムを混在させると、このような問題が発生する可能性があります。誰を追跡するために、Dependency Walkerを使用して依存関係のツリーを一覧表示できます。 – Niall

+0

msvcp120d.dllは、Visual Studio 2013 debug crtの一部です。それがリリースで使用されている場合は、デバッグとリリースのランタイムが互いに互換性がないため、私はUBを期待します。アプリケーションと依存するすべてのDLLが同じ構成で構築されていることを確認してください。コンパイラのバージョンを混在させることも安全ではありません。 – drescherjm

答えて

2

@Niallありがとうございました! Dependencywalker.comのソフトウェアは素晴らしかったです。私はそれを使用して、問題の原因となっているライブラリを特定し、エラーを追跡することができました。私は以前、(数ヶ月前に、愚かにも)そのライブラリのデバッグバージョンへのシステムパスを設定していたことが判明しました。したがって、私のプロジェクトは、ライブラリのリリースバージョンにリンクするように正しく指示されていても、実行時には、実行可能ファイルが* .dllファイルのデバッグバージョンにリンクしていました!

私はpath変数を削除して、適切な* .dllファイルのコピーがReleaseまたはDebugディレクトリにあることを確認しました。それからすべてが実行され、正常にシャットダウンします。

助けてくれた皆様に感謝します。

関連する問題