C++ Github上的涟漪代码分析?需要帮助,缺少文档(特别是定义和宏)

C++ Github上的涟漪代码分析?需要帮助,缺少文档(特别是定义和宏),c++,github,boost,open-source,ripple,C++,Github,Boost,Open Source,Ripple,我正在研究Ripple公司的代码,该公司提供跨货币支付解决方案 我目前正在分析他们的守护程序服务器的代码 我可能不是第一个得出这一结论的人,但要在别人的大型项目中不迷失方向是极其困难的。虽然提供了文档,但如果您不是创建者之一,代码对我来说仍然不可理解 一个主要的困难是代码引用了外部库,有时感觉不可能知道在哪里查找以了解函数的功能或变量包含的值 我现在的问题中有一个简单的例子: 我从main.cpp文件开始,因为我假设这是程序启动时启动的文件,我有以下几行: #if defined(BEAST_L

我正在研究Ripple公司的代码,该公司提供跨货币支付解决方案

我目前正在分析他们的守护程序服务器的代码

我可能不是第一个得出这一结论的人,但要在别人的大型项目中不迷失方向是极其困难的。虽然提供了文档,但如果您不是创建者之一,代码对我来说仍然不可理解

一个主要的困难是代码引用了外部库,有时感觉不可能知道在哪里查找以了解函数的功能或变量包含的值

我现在的问题中有一个简单的例子:

我从main.cpp文件开始,因为我假设这是程序启动时启动的文件,我有以下几行:

#if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD)
#include <sys/resource.h>
#endif
我搜索了一个星期,但是我找不到BEAST_LINUX的用途

这是一个冗余的问题,宏和预处理指令被频繁调用,比如define,define等等,而文档很少在网上找到


此外,是否有一种快速方法可以发现变量在GitHub存储库中声明的位置,特别是在另一个文件中声明时?

这似乎是一个宏

#if (defined (_WIN32) || defined (_WIN64))
  #define       BEAST_WIN32 1
  #define       BEAST_WINDOWS 1
#elif defined (BEAST_ANDROID)
  #undef        BEAST_ANDROID
  #define       BEAST_ANDROID 1
#elif defined (LINUX) || defined (__linux__)
#define BEAST_LINUX 1
在此文件的源中定义。这是一个旧的源代码,但是,新的库不再包含此定义。这个新的库位于这里,也提交给Boost


您可以使用Github搜索来搜索特定的存储库中的代码,但是,它只适用于最新的文件版本。要搜索所有文件版本,需要从命令行进行搜索,如下所述。除非您的IDE支持转到定义功能,否则无法快速搜索变量或宏定义。

这似乎是一个宏

#if (defined (_WIN32) || defined (_WIN64))
  #define       BEAST_WIN32 1
  #define       BEAST_WINDOWS 1
#elif defined (BEAST_ANDROID)
  #undef        BEAST_ANDROID
  #define       BEAST_ANDROID 1
#elif defined (LINUX) || defined (__linux__)
#define BEAST_LINUX 1
在此文件的源中定义。这是一个旧的源代码,但是,新的库不再包含此定义。这个新的库位于这里,也提交给Boost


您可以使用Github搜索来搜索特定的存储库中的代码,但是,它只适用于最新的文件版本。要搜索所有文件版本,需要从命令行进行搜索,如下所述。没有快速的方法来搜索变量或宏定义,除非您的IDE支持转到定义功能。

我是rippled的开发人员之一。正如另一个答案所暗示的,当代码在Linux平台上编译时,这是一个设置为非零值的宏;如果是,则会导致预处理器包含特定的标头

此定义最初位于名为Beast的库中。该库的大部分内容已从Beast迁移到Ripple源代码中,以帮助将Beast令人敬畏的websocket和http例程包含到Boost中

如果您在Windows下工作,则有一个VisualStudio项目,加载该项目后,使用VisualStudio内置的工具,可以非常轻松地发现符号和代码调用图


我还有一个Doxygen构建,它生成了很好的类和注释文档,以及一个交叉引用。我会考虑在网上公开它。

我是Ripple的开发者之一。正如另一个答案所暗示的,当代码在Linux平台上编译时,这是一个设置为非零值的宏;如果是,则会导致预处理器包含特定的标头

#if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD)
#include <sys/resource.h>
#endif
此定义最初位于名为Beast的库中。该库的大部分内容已从Beast迁移到Ripple源代码中,以帮助将Beast令人敬畏的websocket和http例程包含到Boost中

如果您在Windows下工作,则有一个VisualStudio项目,加载该项目后,使用VisualStudio内置的工具,可以非常轻松地发现符号和代码调用图

我还有一个Doxygen构建,它生成了很好的类和注释文档,以及一个交叉引用。我会考虑让它在网上公开

#if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD)
#include <sys/resource.h>
#endif
让我向您介绍一下我将如何对该代码进行推理:

首先,我看到它有时包含sys/resource.h,有时不包含它。它告诉我这是一个系统头。因此,这是决定是否包含特定系统头的代码

其次,我看到测试针对的是不同于LINUX、MAC和BSD的宏。我知道这些是平台。测试是一个or

所以,现在我可以得出结论,如果设置了与三个平台中的一个相关联的定义,那么我们将包含一个特定的系统头

将sys/resource.h插入我最喜欢的搜索引擎,我发现它是搜索引擎的一部分。我注意到宏中提到的所有三个平台都有UNIX的传统

总之 但是,代码似乎在那些预期具有特定头的平台上包含了一个SUS头。特别是,不要在Windows上,因为Windows不会有它

顺便说一下,我建议将git存储库克隆到您自己的机器上,这样您就可以在上面使用本地搜索工具。如果您要分析大量代码,那么设置一个能够容纳代码的环境,让您编译和分析代码,然后学习如何使用其搜索和导航工具快速绕过代码是值得的

让我向您介绍一下我将如何对该代码进行推理:

首先,我看到它有时包含sys/resource.h,有时不包含它。它告诉我这是一个系统头。因此,这是决定是否包含特定系统头的代码

其次,我看到测试针对的是不同于LINUX、MAC和BSD的宏。我知道这些是平台。测试是一个or

所以,现在我可以得出结论,如果设置了与三个平台中的一个相关联的定义,那么我们将包含一个特定的系统头

将sys/resource.h插入我最喜欢的搜索引擎,我发现它是搜索引擎的一部分。我注意到宏中提到的所有三个平台都有UNIX的传统

因此,总而言之,代码似乎包含了预期具有特定头的平台上的SUS头。特别是,不要在Windows上,因为Windows不会有它


顺便说一下,我建议将git存储库克隆到您自己的机器上,这样您就可以在上面使用本地搜索工具。如果你要分析很多代码,设置一个可以保存代码的环境是值得的,它可以让您编译和分析代码,然后学习如何使用其搜索和导航工具快速绕过代码。

谢谢您,这就是我一直在寻找的。我还希望学习如何搜索,而不是学习如何使用这些库。你怎么知道它在stellar deposit上,特别是PlatformConfig.h文件中?我查看的每个文件的开头都有很多包含的标题。我搜索了BEAST_LINUX的stellar repo,然后按Ctrl+F并搜索了define,然后单击结果,直到看到定义。我不认为你会在2013版的Beast上找到任何好的文档,但你可能会幸运地联系作者并索取它。因此,你链接到了Stellar过期的Beat副本。Beast的最新版本在这里:注意,我是作者。@VinnieFalco我确实提供了一个指向您当前存储库的链接:应该让它变得更明显,但谢谢您,这正是我所寻找的。我还寻求学习如何搜索更多,以了解如何使用这些库。你怎么知道它在stellar deposit上,特别是PlatformConfig.h文件中?我查看的每个文件的开头都有很多包含的标题。我搜索了BEAST_LINUX的stellar repo,然后按Ctrl+F并搜索了define,然后单击结果,直到看到定义。我不认为你会在2013版的Beast上找到任何好的文档,但你可能会幸运地联系作者并索取它。因此,你链接到了Stellar过期的Beat副本。Beast的最新版本在这里:注意,我是作者。@VinnieFalco我确实提供了一个指向您当前存储库的链接:不过,应该让它更明显