私は、ウィンドウ(64ビット)で作業しているプロジェクトの1つにいくつか問題があります。プログラムがクラッシュすることもありますが、時にはそうではありません。問題が複数のリンクされたCランタイムにリンクされていると思われます。ウィンドウでこれをどのように検出できますか? depends.exeを試してみましたが、CRTを報告しませんでした複数のリンクされたCランタイムをウィンドウで検出する
答えて
複数のCランタイムライブラリを静的にリンクすることはできません。多くのシンボル定義の競合が発生し、大量の警告が発生します。無謀な技術者だけがそれらを無視するだろう。
depends
では、動的プロファイルオプションを使用して、ロードする動的CRTLのすべての依存関係を確認します。もし何も起きなければ、私はあなたの問題が他のところにあると思う。
CレベルのAPIを持つDLLは、CRTLの共有状態(通常はメモリアロケータ)に頼ってはならないので、どのような場合でも問題は他のものと思われます。 caller-allocates、callee-use、memory allocation callbackなどのAPI間メモリ管理のための標準化されたプロトコルです。つまり、同じプロセス内の複数のCRTLは通常、メモリ管理プロトコル。
一時的な障害については、マルチスレッドまたはヒープの破損が考えられます。
私は動的プロファイリングオプションを検討します。ありがとう CRLTの共有状態に関して、私はそれについて何もできないと思います。これはPython拡張のためのもので、メモリ割り当て部分(refcounting)では何も制御しません。私は複数のCRTが問題ではないというあなたの主張に驚いています - 私は窓の専門家から遠いですが、かなりの情報源から避けるべきであることを一貫して読んでいます。私はそれが慎重に避けることができると理解していますが、私はそれが最終的な実行可能ファイルのすべての部分を制御しないので、私のケースでは実行可能だとは思わない。 –
ほとんどの場合、WindowsでDLLを使用すると、ソースはなく、使用しているランタイムライブラリを制御することはできません。 GNU CライブラリがあるLinuxのようなものではなく、すべての共有ライブラリは、mallocがプロセス全体で同じアロケータに解決することを(通常)信頼することができます。さらに、DLLは異なる言語で記述することができます。 C EXEで使用されているPascal DLL、またはその逆のDLLは、要件が異なるため、ランタイムライブラリを共有できません。したがって、メモリ管理規約またはプロトコルに従う必要があります。 –
私は最終的にスタックトレースを取得することができました。問題は確かにDLL境界を越えて渡されるFILEです。だから私は何とかしなくてはならないと思う。 Windows上でのdll境界のプロトコルに関する参考資料はありますか?私はこの問題に本当に慣れていません。私が取り組んでいるコードベースのいくつかの場所でそれを処理する必要があるのでしょうか? –
- 1. リンクされたリストループ検出アルゴリズム
- 2. データがリンクされた複数のXML?
- 3. 複数のアクティビティにリンクされたカスタムタイトルバー
- 4. リンクされたリストのループを検出することにフォローアップ
- 5. 複数のリストボックスをリンクするC#
- 6. Cでリンクされたリスト
- 7. Cでリンクされたリストプログラム
- 8. ユーザーがカスタムWebKitウィンドウのリンクをクリックしたときに検出する
- 9. C#(.net)Windowsサービスで開始されたウィンドウまたはユーザーログインを検出する方法?
- 10. ヘルプは、致命的なエラーがJavaランタイム環境で検出された
- 11. Cのリンクされたリスト
- 12. 複数のflvファイルをマージする - ランタイム
- 13. HTTP :: Responseで複製されたヘッダーを検出します
- 14. ウィンドウがアンロードされている場所を検出する
- 15. メインブラウザのウィンドウで複数のリンクを開く方法は?
- 16. PHPを実行中:リンクがクリックされたことを検出
- 17. VS 2008 - 古いCランタイムとのリンク
- 18. 検出ボタンは、複数のアラートビューがあるとき押され
- 19. 新しいウィンドウ/タブまたは現在のウィンドウでリンクが開くかどうかを検出します。
- 20. 複数のイメージを検出するロードイベント
- 21. C++でリンクされたリストの問題
- 22. Visual Studio 2010の複数の出力ウィンドウ
- 23. C++のGUIにリンクされたC++プログラム
- 24. jQuery Validatorで2つのリンクされたフィールドを検証する
- 25. リンクされたリストコピー/セマンティックC++
- 26. C++ランタイム関数ハング
- 27. SQLAlchemyとMySQLで複数リンクされたリスト
- 28. フォアグラウンドウィンドウのどの子ウィンドウがクリックされたかを検出しますか?
- 29. 複数の出力されたカレンダー形式を変更する
- 30. 1つまたは複数のファイルのドラッグを検出する
クラッシュはどこですか?スタックトレースなどありますか? – Macke
スタックトレースのないCランタイムのどこかに、残念ながら... –