Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.