C++Builder 64 ビット Windows アプリケーションのデバッグ

提供: RAD Studio
移動先: 案内検索

C++Builder 64 ビット Windows アプリケーションの開発 への移動


C++Builder 64 ビット Windows 版コンパイラ(BCC64)では、デバッグ情報を DWARF 形式で生成します。これは BCC32 および BCCOSX で使用しているものとは異なる形式です。しかしそれ以外の面では、C++ 64 ビット Windows アプリケーションのデバッグは、C++ 32 ビット Windows アプリケーションのデバッグと似ています。以下に示すように、相違点がいくつかあります。

  • 一部のデバッガ機能がサポートされていません。プロパティ、クロージャ、クラス メソッドなどの Delphi 言語拡張機能のデバッグは現時点ではサポートされていません。
    たとえば、[デバッグ インスペクタ]では、C++ 64 ビット Windows アプリケーションの場合、[メソッド]タブと[プロパティ]タブが表示されません。
  • Unicode、コード ページ、ローカライズは、完全にはサポートされていません。
    たとえば、Unicode は識別子名には使用できず、コード ページは C++ 64 ビット Windows 版デバッガではサポートされていません。
  • 64 ビット Windows レジスタを評価する際には、$rax などのように、レジスタ名の先頭に $ を付ける必要があります。
    [評価/変更]」を参照してください。
  • 例外を送出する関数呼び出しは以下のように処理されます。
    • 関数に try/except/catch ブロックが含まれていて、実行中に C++ 例外や OS/SEH 例外が発生した場合、その関数呼び出しは正常に終了しますが、結果は未定義か 0 になります。この場合は、例外がデバッガで直接処理されるため、内部の例外ブロックは実行されません。
    • 関数に try/except/catch ブロックが含まれていて、言語例外や OS/SEH 例外が発生しない場合、その関数呼び出しは正常に終了し、結果は関数に応じて正しいものになります。


呼び出し履歴の違い

64 ビット評価モジュールでは、一部の値の表示が 32 ビット評価モジュールの場合とは異なる可能性があります。たとえば、呼び出し履歴の表示には、関数のパラメータと値が含まれません。

呼び出し履歴には、通常、各コンストラクタおよびデストラクタのコピーが 2 つずつ含まれています。 たとえば、呼び出し履歴に以下の内容が含まれているとしましょう。

 :0000000000401244 ; MyClass::~MyClass

 :0000000000401229 ; MyClass::~MyClass

 :0000000000401187 ; main

 :000000000040ef90 ; _startup
メモ: Clang では Itanium ABI を実装していますが、これには、互いを連鎖的に呼び出す 3 つのコンストラクタと 3 つのデストラクタが記述されています。ただし、Clang では、これら 3 つのコンストラクタのうち 2 つしか実装されておらず、C++Builder では、この 3 つ目のコンストラクタが Delphi 形式のクラスに追加されています。詳細については、Itanium ABI のドキュメントhttp://stackoverflow.com/questions/6921295/dual-emission-of-constructor-symbols の投稿を参照してください。

strcmp() などの関数呼び出しの評価

strcmp(str, "ABC") などの関数呼び出しを評価すると、以下のようなエラーが返されるおそれがあります。

#include <system.hpp>
int main()
{ 
char *str = "ABC";
return strcmp(str, "ABC"); 
}

error: 'strcmp' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression

[評価/変更]ウィンドウでは、以下のように strcmp() の戻り値型をキャストする必要があります。

   (int) strcmp(str, "ABC"); 

詳細については、「strcmp、_mbscmp、wcscmp」を参照してください。

関連項目