C++ コンパイラやリンカの問題のレポート方法
C++ コンパイラ への移動
目次
コンパイラの問題のレポート方法
診断の詳細度を有効にする
- [ツール|オプション...|コンパイルと実行]と移動します。
- [詳細度]ドロップダウンを[診断]に変更します。
- プロジェクトのビルドを行います。
- メッセージ ペインの[出力]タブから、メッセージをテキスト ファイルに保存します。
- テキスト ファイルをバグ レポートに添付します。
プリプロセス済みファイルを含める
コンパイラのクラッシュを報告する場合、レポートにはクラッシュを示す絞り込んだテストケースを含める必要があります。それが不可能な場合は、クラッシュの原因となるソース ファイルのプリプロセス済みのコピーを含めます。
プリプロセス済みファイルを作成するには、プロジェクト マネージャでクラッシュしたソース ファイルを右クリックし、[プリプロセス]を選択します。IDE は、.i ファイルを 1 つ作成します。そのファイルを保存し、レポートに含めます。
メッセージ ビューの[出力]タブに示されているように、レポートにコンパイラのコマンド ラインを追加する必要があります。
コマンドライン: [ビルド]タブと[出力]タブ
[ビルド]タブからコマンドラインをコピーする方が簡単ですが、[出力]タブから、レポートに含まれるコマンドラインをコピーする方が良いでしょう。[ビルド] タブでは長いコマンドラインは折り返されてしまうためです。
リンカ問題のレポート方法
リンカがクラッシュした場合、研究開発チームは通常、問題を再現するためにリンクセット全体を必要とします。
リンカ チームに XXX#### コードを検索してもらう
「致命的エラー: エラーが検出されました(XXX####)」とエラーが発生した場合、リンカ チームはエラーを検索し(3文字はリンカ ソース ファイル、数字は行番号を表します)、何が起こっているのかについてのガイドラインを提供できる可能性があります。場合によっては、これはコンパイラが不正なオブジェクト ファイルを生成していることを示しています。
リンカ問題に対して可能な回避策
インクリメンタル リンクをオフにする
インクリメンタル リンクをオフにし、プロジェクトをクリーンアップし、リビルドします。これは ilink32 では役に立ちますが、ilink64 では、WIN64 の IDE では -Gn
がハードコードされているため役に立ちません。
バンプ ヒープ サイズ(メモリ不足 の場合)
ilink64 でエラーが「致命的エラー: メモリ不足」の場合、-GH スイッチが役に立ちます。まず、ilink64 LARGE ADDRESS AWARE を作成する必要があります。これを行うには、Visual Studio 附属の editbin ユーティリティを使用します。
editbin.exe /LARGEADDRESSAWARE $BDS/bin/ilink64.exe
そして、-GH スイッチを使用して、オーバーフローしているヒープを増やします。たとえば、典型的な障害では、次のようなレポートが表示されます:
Turbo Incremental Link64 6.72 Copyright (c) 1997-2015 Embarcadero Technologies,
Inc.
Overrun on linker heap: dwarf_info
...
dwarf_info 0x06039000 0x06000000
...
Fatal: Out of memory
dwarf_info ヒープがオーバーフローしています。解決策としては、次の方法で、リンカにより大きなサイズを割り当てるように指定します:-GHdwarf_info=0x0E000000
.
1 つのヒープを増やした後、別のヒープがオーバーフローする場合があります。このため、最終的なコマンドラインは次のようになります:
-GHinfo=0x24000000 -GHdwarf_info=0x0E000000 -GHbss=0x0E000000 -GHdwarf_str=0x0A000000 -GHdwarf_line=0x06000000 -GHcode=0x0E000000
メモリ不足と不明なヒープ エラー
ilink32 が OOM が発生させ、その後、不明なヒープ エラーが発生する場合があります(通常、その不明なヒープは tds です)。
この回避策が役に立つかもしれません:
IDE にて:
- [プロジェクト|オプション...|C++ リンカ|詳細|追加オプション]と移動
-GHtds=0x0A000000
を追加します。- 再びリンクを試みます。