如何在CLion中读取C库的源代码

问题描述

  • 操作系统:Deepin 20(基于Debian 10)
  • CLion:2020.1.2
  • GCC:gcc(Uos 8.3.0.3-3 +重建)8.3.0
  • 制作:4.2.1 x86_64-pc-linux-gnu
  • Cmake:3.18.1

我是刚开始学习C语言的新手。当我使用CLion编写C代码时,可以通过Ctrl + mouse click访问它。

我正在调用标头函数中的方法。例如,如果我使用printf,则可以访问stdio.h文件,该文件可以在第332行extern int printf (const char * ___,RESTRICT,format,...) ; 看到。

但是,如果我想查看此方法的详细信息

我看不到。根据{{​​3}}

使用Ctrl+Alt+Home进行切换。但是IDE会提示No related file

如何获取源代码来调用方法?我想通过查看其他人在其库中的实现逻辑来学习他们的良好经验

谢谢您的评论。如果您能帮助我,我将不胜感激。

解决方法

即使大多数GNU / Linux软件是open source,默认情况下也不会以源代码形式安装该软件。

关于C编程,请参见Modern C(和C11标准n1570)并阅读C编译器的文档(也许是GCCClang,或更简单的类似nwcctinycc),链接器(可能是binutils),build automation工具(例如GNU makeninjacmake )。启用所有警告和DWARF调试信息,因此如果使用GCC进行编译,至少要使用gcc -Wall -Wextra -g;然后改进您的C代码以获取任何警告。调试完C源代码(使用GDB并可能使用valgrind)后,请添加优化标志,例如-O2gcc的参数顺序很重要!

请考虑一下,对于某些任务,使用诸如GNU bisonANTLRSWIG,{等的工具来生成一些C代码(也许是#include-d头文件) {3}},RPCGENAWKGUILEGPPGNU m4-或您自己的程序或脚本。

我想通过查看其他人在其库中的实现逻辑来学习他们的良好经验

您需要从其他地方获取源代码。

有关示例,请参见GNU autoconfGNU libcmusl-libc(以及其他Linux kernelGTKPostGreSQL,{{ 3}}等...,包括此答案中提到的许多开源程序),并且还在sqliteGUILEgithub

也请阅读gitlabsourceforge。另请参见Advanced Linux Programming

在2020年,当要求优化时,最近的syscalls(2)编译器碰巧处理对printf的特殊调用。请参见http://linuxfromscratch.org/GCC项目。

在某些情况下,请考虑在程序中使用softwareheritageFrama-C接受plugins(另请参见dlopen(3)dlsym(3))。您甚至可以在运行时使用elf(5)之类的库生成一些代码(或在运行时生成C代码,然后将其编译为插件并加载它;这种方法称为How to Write Shared Libraries,与{ {3}};有关更多见解,另请参见libgccjit

当然,您需要在源代码中导航的工具。为此,可以考虑结合使用metaprogrammingpartial evaluation或其他blog of the late J.Pitrat。对于具有数百万个源代码行的大型程序,请考虑编写自己的GNU emacs来理解它们。>

还使用GNU grepsource navigator.之类的工具来了解程序的动态行为。

期望几个月的全职工作来探索所有这一切。

您也可能对GCC plugin个会议论文感兴趣。

对于您自己的源代码,请考虑使用一些strace(1)工具,例如GDB。当然,请阅读其文档。并使用ACMversion controlgitLibreOffice(可能与数字LoutLaTeX结合使用)编写软件的文档

在某些情况下,您可能会考虑从部分源代码生成部分文档(例如,使用MarkDown之类的inkscape技术或diagrams之类的文档生成器)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...