2017-08-27 10 views
1

libclangのPythonバインディングを使用してASTをトラバースする次の単純なPythonコードがありますが、残念ながらセグメンテーションエラーでクラッシュします。セグメンテーションエラーでpython-clangがクラッシュする

:Iは、6.0 python2.7を使用し、以下のすべての打ち鳴らすバージョン3.8、3.9、4.0、5.0を試してい

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) 

バックトレース(もちろん各バージョンの右のPython打ち鳴らすバインディングを使用)

#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 

私はgithubのからビットコインのソースコード上のPythonコードを実行していると、このバックトレースファイルのsrc /ビットコイン-cli.cpp

それがクラッシュした理由を任意のアイデアのためにあるのですか? ありがとう、Sagi

+0

:clang.cindex.Config.set_library_file( 'は/ usr/libに/ LLVM-6.0/libに/ libclang 。そう') – sagi

答えて

0

node.mangled_nameによってクラッシュが発生することがわかりました。

関連する問題