問題タブ [libclang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
3704 参照

c++ - libclangはプリミティブ値を取得します

libclangを使用してプリミティブリテラルの値を取得するにはどうすればよいですか?

たとえば、カーソルの種類がCXCursor_IntegerLiteralのCXCursorがある場合、リテラル値を抽出するにはどうすればよいですか。


アップデート:

libclangを使用すると非常に多くの問題が発生しました。私はそれを完全に避け、代わりにclangが提供するC++インターフェースを使用することを強くお勧めします。C ++インターフェースは非常に使いやすく、十分に文書化されています:http: //clang.llvm.org/doxygen/annotated.html

libclangの唯一の目的は、次のコードのようにASTUnitオブジェクトを生成することです(それ以外の場合は簡単ではありません)。

ここで、libclangは安定しているが、C++インターフェースは安定していないと言うかもしれません。libclangを使用してASTを理解し、それを使用してクラッジを作成するために費やす時間は、とにかく多くの時間を浪費するため、これはほとんど問題になりません。バージョンのアップグレード後にコンパイルされないコードを修正するのに数時間を費やしたいと思います(必要な場合でも)。

0 投票する
0 に答える
294 参照

c - libClang の「「-fsyntax-only」が存在する場合、「リンカー」入力は使用されません」

libclangを使用してコードでclangによって生成された実行可能ファイルを実行しようとしているときに、この種の問題を経験した人はいますか(gccを使用してコンパイルすると発生します)? いくつかの印刷を使用して、次の関数呼び出しで発生することに気付きました:fprintf(stderr, "%s\n", clang_getCString(String));この場合、Cstring からの出力があります。Clang -lclang を使用してコンパイルしています

ありがとう。

0 投票する
1 に答える
2168 参照

c++ - メンバ関数が const か volatile かを libclang で調べる方法は?

CXCursorkindのインスタンスがありますCXCursor_CXXMethodconst関数がまたはであるかどうかを調べたいvolatile、たとえば:

libclang のドキュメントには有用なものが見つかりませんでした。試しclang_isConstQualifiedTypeてみましたが、これらは常にC++ メンバー関数型でclang_isVolatileQualifiedType返されるようです。0

0 投票する
1 に答える
1539 参照

llvm - libclangで、関数呼び出し時にカーソルの宣言タイプのカーソルを取得するにはどうすればよいですか?

インクルードされたヘッダーファイル内でプロトタイプが宣言されている関数呼び出しを指すカーソルがあります。そのような宣言の場所を取得したいのですが、以下のgdb出力に示されているように、関数呼び出しの型を取得した後、宣言型のカーソルを取得できません。正しく取得するにはどうすればよいですか。

関連するすべてのソースコードは次のとおりです。

0 投票する
1 に答える
627 参照

c++ - libclang を使用して、特定の警告を有効または無効にするにはどうすればよいですか?

libclang API を使用して、C++ プロジェクトをプログラムで分析しようとしています。コンパイルは問題なく、ツールは生成された AST を適切に解析していますが、特定の警告をオン/オフする方法がわかりません。

関連するコード スニペットは次のとおりです。「未使用の変数」警告を有効/無効にしたいと思います。

0 投票する
2 に答える
2197 参照

clang - libclang:ASTにいくつかのステートメントがありませんか?

acソースファイル(tt.c)を解析してlibclangがどのように機能するかを確認するためのテストプログラム(parse_ast.c)を作成しました。出力は、ASTの階層構造です。

テストファイルは次のとおりです。

出力は次のようになります。

3つの関数(7行目のdirect_write/11行目のindirect_write/15行目のmain)があり、ほとんどのステートメントはASTにありますが、12行目のステートメントを表すものは見つかりません。 17行目。理由を知っている人はいますか?

私はdebian2.6.32squeezeを使用しており、clang 3.1と3.2(ソースからコンパイル)の両方でテストされています。

プログラムparse_ast.cは次のとおりです。

更新

問題はヘッダーファイルstddef.hが欠落しているためであり、libclangのメールリストhttp://clang-developers.42468.n3.nabble.com/libclang-missing-some-statements-in-the-AST-td4029641で回答されています。 .html

0 投票する
1 に答える
10191 参照

llvm - libclang に関するチュートリアルはありますか?

libclang のわかりやすいガイドを探していました。ここまたは他のフォーラムでいくつかのスレッドを見てきましたが、推奨される唯一の情報源は、libclang source/doxygen doc、vim 用の完全なプラグインの clang、またはCompilerプレゼンテーションを超えた思考です。ただし、実際の使用に関する情報は提供されていません。コード補完/構文の強調表示 (おそらくいくつかの基本的なリファクタリング/解析) の実装に興味があります。

私の質問は、上記以外にわかりやすいチュートリアルはありますか? たぶん、上級の libclang ユーザーの一部はそれを書くことができます:)

注:clangのプラグインを書くことに興味はありません。

0 投票する
0 に答える
128 参照

c++ - 特定の位置に表示される型名のリスト

ソースが不完全な場合 (編集中など) であっても、C++ ソースの特定の位置に表示されるすべての型名のリストをプログラムで取得する方法が必要です。

LibClang はおそらくコード補完モジュールの内部でそのようなリストを作成していることを理解していますが、仕様からわかる限り、それは公開されません。

さて、私は Clang ソースで手を汚すことを恐れていませんが、ハッキングを開始する前に、必要なものを入手するために見逃している簡単な方法はありますか? または、リストを取得できる別のライブラリまたはコマンド ラインツールはありますか?

0 投票する
1 に答える
3331 参照

c - C コードで libclang を静的にリンクする

libclang で利用可能なフロントエンドを使用して、C コードの単純な構文チェッカーを作成しようとしています。展開上の問題により、libclang 内のすべてのライブラリを静的にリンクできる必要があり、すべてのライブラリを含む .so ファイルを渡さないようにする必要があります。

ソースからclang/llvmを構築しています.llvm/Release + Asserts / libには、使用できるはずの.aファイルがたくさんありますが、動作していないようです(リンカは何千もの.シンボルの欠落に関するエラー)。ただし、libclang.so を使用してコンパイルすると、次のようにそのディレクトリにも存在します。

すべてがうまくいくようです。

これを機能させるために含める必要がある .a ファイルの最小セットは何ですか? ビルド出力ディレクトリに絶対にすべての .a ファイルを含めようとしましたが、それらは異なる順序で clang/gcc に提供されましたが、成功しませんでした。libclang の Index.h に記載されている関数だけが必要ですが、さまざまな libclang*.a ファイルの目的に関するリソースやドキュメントはないようです。libclang.so が取り込むファイルを知っておくと非常に役立ちます。

0 投票する
1 に答える
1694 参照

c++ - C++ libclang: CXSourceLocation からカーソルを取得すると、間違ったカーソルが返されますか?

私は現在、C++ で libclang を使用して単純なクローン検出器を作成しています。

このプログラムは、構造体を使用してカーソルを格納します。この構造体には、翻訳単位へのポインターと、clang_getCursorLocation(cursor) の呼び出しから取得した CXSourceLocation が含まれます。

このエラーのために、子ビジター関数は各ノードにアクセスし、各カーソルから構造体を作成します。タイプ t_cursorLocation の構造体を使用して、対応するカーソルを取得する次の関数を作成しました。

ただし、一部のカーソルでは、t_cursorLocation 構造体を作成し、それを使用して作成元のカーソルを取得すると、取得されたカーソルは元のカーソルと等しくなりません。例として、子ビジター関数を参照してください。

私の主な機能は次のとおりです。

これを実行したダミーのソース コードは次のとおりです。

ただし、出力は一貫しており、これは特定のカーソルの種類でのみ発生することを示唆しています。

これはバグですか、それとも私が見逃している、または間違っていることがありますか?

前もって感謝します、ジェイコブ