2017-08-27 3 views
1

J'ai le code python simple qui traverse l'AST en utilisant libclang python bindings, malheureusement, il se bloque avec la faute de segmentation. J'utilise python2.7 et essayé toutes les versions clang suivantes 3.8, 3.9, 4.0, 5.0, 6.0 (et bien sûr utilisé les liaisons à droite de Clang python pour chaque version)python-clang se bloque avec le défaut de segmentation

import clang.cindex 

def traverse(node): 
    print("%-42s %-20s %-10s %-6s %s" % (node.kind, node.spelling, node.type.spelling, node.location.line, node.mangled_name)) 
    for child in node.get_children(): 
     traverse(child) 

clang.cindex.Config.set_library_file('/usr/lib/llvm-3.8/lib/libclang.so') 
index = clang.cindex.Index.create() 
tu = index.parse(sys.argv[1], args=['-Werror']) 
traverse(tu.cursor) 

Le backtrace:

#0 clang::TagType::getDecl (this=0x0) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/Type.cpp:2962 
#1 0x00007f9ecbe65caf in clang::RecordType::getDecl (this=<optimized out>) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/include/clang/AST/Type.h:3554 
#2 (anonymous namespace)::CXXNameMangler::mangleUnqualifiedName ([email protected]=0x7ffe35f45470, [email protected]=0x7f9ec0092cc8, Name=..., 
    [email protected]=0x7ffe35f453c0, KnownArity=4294967295) 
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:1184 
#3 0x00007f9ecbe60250 in (anonymous namespace)::CXXNameMangler::mangleUnqualifiedName (AdditionalAbiTags=0x7ffe35f453c0, ND=<optimized out>, this=0x7ffe35f45470) 
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:481 
#4 (anonymous namespace)::CXXNameMangler::mangleLocalName ([email protected]=0x7ffe35f45470, [email protected]=0x7f9ec0092cc8, [email protected]=0x7ffe35f453c0, 
    [email protected]=false) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:1471 
#5 0x00007f9ecbe607b7 in (anonymous namespace)::CXXNameMangler::mangleNameWithAbiTags ([email protected]=0x7ffe35f45470, [email protected]=0x7f9ec0092cc8, 
    [email protected]=0x7ffe35f453c0, [email protected]=false) 
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:801 
#6 0x00007f9ecbe61621 in (anonymous namespace)::CXXNameMangler::mangleName (this=0x7ffe35f45470, ND=0x7f9ec0092cc8, ExcludeUnqualifiedName=<optimized out>) 
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:776 
#7 0x00007f9ecbe62822 in (anonymous namespace)::ItaniumMangleContextImpl::mangleCXXName (this=<optimized out>, D=0x7f9ec0092cc8, Out=...) 
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:4422 
#8 0x00007f9ecbd4df6b in clang_Cursor_getMangling (C=...) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/tools/libclang/CIndex.cpp:3996 
#9 0x00007f9eccbd2e40 in ffi_call_unix64() from /usr/lib/x86_64-linux-gnu/libffi.so.6 
#10 0x00007f9eccbd28ab in ffi_call() from /usr/lib/x86_64-linux-gnu/libffi.so.6 

Je suis en cours d'exécution du code python sur le code source de Bitcoin github et c'est le backtrace fichier src/Bitcoin-cli.cpp

toute idée pourquoi il se bloque? Merci, Sagi

+0

il arrive aussi lorsque vous utilisez le dernier libclang.so: clang.cindex.Config.set_library_file ('/ usr/lib/LLVM-6.0/lib/libclang .alors') – sagi

Répondre

0

J'ai trouvé que node.mangled_name provoque le plantage.