Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Clang tooling.

Hasonló előadás


Az előadások a következő témára: "Clang tooling."— Előadás másolata:

1 Clang tooling

2 Miért? Analízis Automatikus hibajavítás Automatikus refaktorálás
Instrumentálás ...

3 Miért clang? További lehetőségek: GCC GCC-MELT ???

4 Lehetőségek Preprocesszor AST bejárás Forráskód-transzformáció
Kód instrumentálás (LLVM!)

5 Lehetőségek Preprocesszor AST bejárás Forráskód-transzformáció
Kódmosítás (LLVM!)

6 Elemezzük, de mit is? C++: ha vannak forrásfájljaink, az még nem elegnedő információ... Kell még fordítási egységek a fordítónak átadott makrók a fordítást befolyásoló opciók Van: sok, teljesen különböző make tool...

7 A: Plugin, fordítás közben
Ideális, ha: elemzünk, plusz hibákat / figyelmeztetéseket jelzünk Nem annyira: Forráskódot módosítunk Nem annyiszor akarjuk futtatni, ahányszor fordítunk

8 B: Compilation database
Fordítás során elmenthető CMake: kapcsoló Bear A clang-toolok alapja [ { “directory”: “/home/…”, “command”: “clang++… “, “file”: “example.cc”, … } ]

9 AST dump clang –Xclang –ast-dump –fsyntax-only test.cpp
Megmutatja, hogy néz ki az AST Ideális tervezéshez, egyszerű példákon

10 AST query – C++ using namespace clang::ast_matchers; mMatcher.addMatcher( callExpr( callee( functionDecl(hasName(“operator new”)), hasAncestor(staticCastExpr().bind(“castE”) )

11 AST query – clang-query
clang-query test.cpp – set output diag; match <expression> Gyorsabb, mint sokszor lefordítani a matchert Az API akár C++-ból is használható For loopok kiváló példák lehetnek az operator new mellett, mint a clang oldalán is Ez a dia simán elvehet példákkal 10+ percet.

12 RefactoringTool Forráskód egyszerű módosításra
Minimális kóddal használható Önálló tool

13 Óvatosan... A Rewriter bármit módosíthat, amihez van írásjogunk
Akár az STL headerjeit is! Egy fájl több fordítási egység része is lehet Akár különböző makrókkal is! Ha hozzáadunk, csak óvatosan! (One Definition Rule)

14 ClangTool Ha nem akarunk módosítani, csak elemezni
Nagyon hasonló a RefactoringTool-hoz LoopPrinter-es clang példa

15 ASTConsumer Tetszőleges, az AST alapján történő munkára
Például: RecursiveASTVisitor Összetettebb, ritkább esetekre Általában a magasabb szintű API egyszerűbb Példa: felcserélt paraméternevek

16 WrapperAction FixItRecompile: automatikusan javítsuk ki a fordítási hibát, és próbáljuk újra... Vagy bármikor, amikor pluginként módosítani akarjuk a forráskódot

17 Kérdések? Köszönöm a figyelmet


Letölteni ppt "Clang tooling."

Hasonló előadás


Google Hirdetések