2017-08-27 3 views
1

Ich habe den folgenden einfachen Python-Code, der den AST mit libclang Python Bindings durchläuft, leider stürzt er mit Segmentierungsfehler ab. Ich verwende python2.7 und versucht, alle folgenden Klirren Versionen 3.8, 3.9, 4.0, 5.0, 6.0 (und natürlich auch verwendet, um die richtige Python Klirren Bindungen für jede Version)Python-Clang stürzt mit Segmentierungsfehler ab

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) 

den 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]ry=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 

ich bin mit dem python-Code auf bitcoin Quellcode von github und diese Backtrace ist für die Datei src/bitcoin-cli.cpp

eine Ahnung, warum es abstürzt? Danke, Sagi

+0

es geschieht auch, wenn neuesten libclang.so mit: clang.cindex.Config.set_library_file ('/ usr/lib/llvm-6.0/lib/libclang .damit') – sagi

Antwort

0

Ich fand, dass node.mangled_name den Absturz verursacht.