Clang tooling.

Slides:



Advertisements
Hasonló előadás
Virtualizált Biztonságos BOINC Németh Dénes Deák Szabolcs Szeberényi Imre.
Advertisements

Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Arató Bence technológiai igazgató Oracle9i Release 2: Relációs és OLAP adatok kezelése közös platformon InfoStructure.
SZENT ISTVÁN EGYETEM GAZDASÁG- ÉS TÁRSADALOMTUDOMÁNYI KAR TUDOMÁNYOS DIÁKKÖRI KONFERENCIA NOVEMBER 25. AUTO-SZŰRŐ FEJLESZTÉSE OLAP JELENTÉSEK UTÓLAGOS,
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
megismerése, mintaadatbázis létrehozása
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Eclipse architektúra.
Szélességi bejárás , 0.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Adatbázis alapú rendszerek
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
Programozás II. 3. Gyakorlat C++ alapok.
Első C programunk Visual C Express-ben Horváth Ernő 1.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
2012. március 7. Paulik Áron Prog szakkör.
Csomagok.
Könnyen,gyorsan Powershell-ül
ANY u WHERE u : seq(MININT..MAXINT) & size(u) = size(s) & #f.(f : 1..size(s) >->> 1..size(s) & !j.(j : 1..size(s) => s(f(j)) = u(j))) & !i.(i : 1..size(s)-1.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
Egyszerű webes alkalmazás fejlesztése Készítette: Simon Nándor.
Egyszerű webes alkalmazás fejlesztése
SZENT ISTVÁN EGYETEM GAZDASÁG- ÉS TÁRSADALOMTUDOMÁNYI KAR TUDOMÁNYOS DIÁKKÖRI KONFERENCIA NOVEMBER 25. AUTO-SZŰRŐ FEJLESZTÉSE OLAP JELENTÉSEK UTÓLAGOS,
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Objektum Vezérelt Szoftverek Analízise Ferenc Rudolf és Beszédes Árpád Szegedi Tudományegyetem FrontEndART.
SQL 2012 TKOC Magas Rendelkezésreállás II. Király István Microsoft Certified Trainer Microsoft Certified Systems Engineer.
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
Kezelői felületek. Exchange 2000/2003 Exchange System Management (ESM) MMC konzol Exchange 2007 Exchange Management Console (EMC) MMC konzol Exchange.
DDL – Adatdefiníciós nyelv
JavaScript a gyakorlatban. 1.Gyakorlat Mi a JavaScript?  A JavaScript nem Java! JavaScript futtatása JavaScript beillesztése XHTML-be Változók kezelése.
Felhasználók és jogosultságok
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Optikai tárolók CD, DVD.
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
ARM tanfolyam 2. előadás.
A szoftver, szoftvertípusok
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
Linux rendszergazda tanfolyam (kezdő) Partíció BT. Kurzus BT. invitel.hu/kurzus.
Adatbázis fejlesztés állapota Jelenlegi állapot: Elkészültek a legfontosabb kulcslisták, és a hozzájuk tartozó feltöltési módosítási nézetek.
1 Mivel foglalkozunk a laborokon? 7. hét: Do-Loop-Until Do-Until-Looptömbök Function 7. hét: Do-Loop-Until és Do-Until-Loop ciklusok. Egy indexes tömbök,
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
Egy keretrendszer bevezetése Affentáller László MarkCon Informatikai Kft.
Mérnöki tervezés december Hangelemző rendszer fejlesztése Symbian OS-re Hegedűs Iván Mihály Pázmány Péter Katolikus Egyetem Információs Technológiai.
CUDA C/C++ programozás Atomikus műveletek A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
1 Mivel foglalkozunk a laborokon? 7. hét: Do-Loop-Until Do-Until-Looptömbök Function 7. hét: Do-Loop-Until és Do-Until-Loop ciklusok. Egy indexes tömbök,
Bevezetés az Office programozásába
Makró készítés Excelben
Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Merevlemezek particionálása
Picasso exhibition in Esztergom, Hungary Picasso exhibition in Esztergom2.
WINDOWS FELÜGYELETI ESZKÖZÖK MICROSOFT SÚGÓ ALAPJÁN - PÉLDÁKKAL Takács Béla 2016.
Szakdolgozatok kezelése a MIDRA adatbázisban. 1. lépés Feltöltés Az elkészült, végleges szakdolgozatot a szerző, vagy megbízottja feltölti a MIDRA adatbázisba.
Adatbázis alapú rendszerek
Kimutatás-pivot tábla, Excel 2010
Haladó Fordítóprogramok
Static Source Code Analysis For PHP Vulnerabilities
Az első lépés a C++ végtelen és izgalmas útján
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata október Skultéti Attila
Az első lépés a C++ végtelen és izgalmas útján
Java Code Coverage Library
Unit tesztelés Swift-ben
Előadás másolata:

Clang tooling

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

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

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

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

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...

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

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

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

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

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 http://clang.llvm.org/docs/LibASTMatchersTutorial.html Ez a dia simán elvehet példákkal 10+ percet.

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

Ó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)

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

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 http://www.hanshq.net/clang-plugin-example.html

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

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