Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ClangPython在解析linux的一些文件时死亡_Python_C_Clang_Clang++ - Fatal编程技术网

ClangPython在解析linux的一些文件时死亡

ClangPython在解析linux的一些文件时死亡,python,c,clang,clang++,Python,C,Clang,Clang++,我正在使用铿锵Python绑定自动解析源代码,但当它解析一些linux文件时,进程将停止,没有CPU消耗,没有错误异常,没有响应,甚至我无法使用Ctrl+C终止终端。我的代码如下: index = Index.create() tu = index.parse(file_path) next_func(tu) 它可以很好地与许多源代码存储库(如Libpng、OpenCV等)配合使用。例如,linux master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c目

我正在使用铿锵Python绑定自动解析源代码,但当它解析一些linux文件时,进程将停止,没有CPU消耗,没有错误异常,没有响应,甚至我无法使用Ctrl+C终止终端。我的代码如下:

index = Index.create()
tu = index.parse(file_path)
next_func(tu)
它可以很好地与许多源代码存储库(如Libpng、OpenCV等)配合使用。例如,
linux master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c
目录下解析文件时,它是如何消亡的https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.c。我一步一步地运行代码,发现在运行
tu=index.parse(file\u path)
时发生了错误

环境:Windows10,libclang.dll(6.0)python2.7

我尝试了命令
clang-cc1-fsyntax only-ast dump anx9805.c
据报告,未找到某些头文件,其ast结构如下:

In file included from \linux\linux-master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c\anx9805.c:28:
In file included from \linux\linux-master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c/bus.h:4: \linux\linux-master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c/pad.h:4:10: fatal error: 'subdev/i2c.h' file not found
#include <subdev/i2c.h>
         ^~~~~~~~~~~~~~
TranslationUnitDecl 0x13de7f82728 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x13de7f82ca0 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x13de7f829c0 '__int128'
|-TypedefDecl 0x13de7f82d10 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x13de7f829e0 'unsigned __int128'
...
...
包含在\linux\linux master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c\anx9805.c中的文件中:28:
在\linux\linux master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c/bus.h中包含的文件中:4:\linux\linux master\drivers\gpu\drm\nouveau\nvkm\subdev\i2c/pad.h:4:10:致命错误:“未找到subdev/i2c.h”文件
#包括
^~~~~~~~~~~~~~
转换单元DECL 0x13de7f82728
|-TypedefDecl 0x13de7f82ca0隐式
|`-内置类型0x13de7f829c0'\uuu int128'
|-TypedefDecl 0x13de7f82d10隐式\uuuuUINT128 \uuuT'无符号\uuuuuInt128'
|`-BuiltinType 0x13de7f829e0'未签名\uuuu int128'
...
...

但是,进程可以结束,我不知道python中是否发生错误,为什么terminal中的进程没有响应,
try…除了…
在我的代码中没有捕捉到错误,甚至我无法终止进程。允许忽略这些错误文件。最重要的是,我不希望代码运行中断。

您能检查一下clang 6.0本身是否在同一个文件上崩溃吗?@ValeriySavchenko我添加了一些关于使用命令clang解析文件的详细信息。
clang-cc1
不使用任何标准包含路径。查看此答案了解更多详细信息:如何为clang提供包含目录和宏定义(正确解析所需)?@ValeriySavchenko事实上,我需要自动解析许多reposite,并且不承诺包含目录和宏定义,因此我没有在python代码
index.parse中设置任何解析参数(文件路径)
。如果有错误,这并不重要。但我不希望我的代码中断。我使用
try…except
跳过错误,但它不起作用。好的,至少尝试使用相同的include目录(标准目录)运行clang 6.0作为您的代码。
-cc1
阻止clang使用它们。让我们简单地检查一下clang在与libclang完全相同的上下文中是否崩溃。