我有以下簡單的python代碼,它使用libclang python綁定遍歷AST,不幸的是它崩潰與分段錯誤。 我使用python2.7,並嘗試了所有的以下鐺版本3.8,3.9,4.0,5.0,6.0(當然還有用於每個版本的權利蟒蛇鐺綁定)python-clang崩潰與分段錯誤
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)
回溯:
#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
使用最新libclang.so時,它也發生了:clang.cindex.Config.set_library_file('/ usr/lib目錄/ LLVM-6.0/lib目錄/ libclang 。所以') – sagi