2016-07-13 8 views
1

Я работаю над кодом, созданным компанией Ripple, которая предоставляет кросс-валютные платежные решения.Анализ рифленый код на Github? Нужна помощь, отсутствие документации (специально определить и макросы)

В настоящее время я анализирую код сервера своего демона available on Github.

Возможно, я не первый, кто пришел к такому выводу, но очень сложно не потеряться, работая над чужим крупным проектом. Хотя документация предоставлена, код по-прежнему не кажется мне понятным, если вы не являетесь одним из создателей.

Одна из основных трудностей заключается в том, что код относится к внешним библиотекам, и иногда ему трудно понять, где искать, чтобы узнать, что делает функция или какое значение содержит переменная.


Простой пример из моего вопроса момента:


Я начиная с файла main.cpp (потому что я предполагаю, что это то, что запускается при запуске программы) и у меня есть эти строки:

#if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD) 
#include <sys/resource.h> 
#endif 

Я искал в течение недели теперь, но я не могу найти то, что BEAST_LINUX для.

(Это избыточная проблема, когда макросы и инструкции препроцесса вызываются очень часто, что относится к #define, что относится к #define и т. Д., И документация редко может быть найдена в сети).

Кроме того, есть ли быстрый способ узнать, где переменная объявлена ​​в репозитории GitHub, особенно когда она объявлена ​​в другом файле?

ответ

0

Это кажется макрос

#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 

определено в этом источнике Beast: An amazing cross platform library в этом файле PlatformConfig.h. Однако это старый источник, но новая библиотека больше не содержит этого определения. Эта новая библиотека находится здесь Beast, также отправлена ​​в Boost.

Вы можете найти конкретный репозиторий для кода с помощью поиска Github, однако он работает только с последними версиями файлов. Чтобы выполнить поиск всех версий файлов, вам нужно сделать это из командной строки, как описано здесь GitHub: searching through older versions of files. Существует не быстрый способ поиска определения переменных или макросов, за исключением случаев, когда поддержка вашей IDE переходит в функцию определения.

+0

Спасибо, что я искал. – superNovice92

+0

Я также хочу узнать, как искать больше, чтобы узнать, как использовать эти библиотеки. Как вы узнали, что это было на «звездном» депозите и особенно в файле PlatformConfig.h (в начале каждого файла, на который я смотрю) есть много заголовков. – superNovice92

+0

Я искал 'stellar' repo для« BEAST_LINUX », затем сделал Ctrl + F и искал« #define », а затем просмотрел результаты, пока не увидел определение. Я не думаю, что вы найдете хорошие документы о версии Beast 2013 года, но вам, возможно, повезло связаться с автором и просить об этом. – buld0zzr

3

Я один из разработчиков rippled. Как следует из другого ответа, это макрос, который устанавливается на ненулевое значение, когда код компилируется на платформе Linux; если это так, то это заставляет препроцессор включать конкретный заголовок.

Это определение было, первоначально, в библиотеке с именем Beast. Большие части этой библиотеки были перемещены из Beast и в источник Ripple, чтобы облегчить включение в Boost потрясающего websocket и http-подпрограмм.

Если вы работаете под Windows, есть проект Visual Studio, который при загрузке упрощает обнаружение символов и графиков вызовов кода с помощью инструментов, встроенных в Visual Studio.

У меня также есть сборка Doxygen, которая дает хорошую документацию классов и комментариев, а также перекрестные ссылки. Я посмотрю, как сделать его доступным публично через Интернет.

4
#if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD) 
#include <sys/resource.h> 
#endif 

Позвольте мне вас через, как я рассуждал бы об этом коде:

Во-первых, я вижу, что это будет иногда включать sys/resource.h, а иногда и не включать его. <> говорит мне, что это системный заголовок. Таким образом, это код, чтобы решить, включать ли какой-либо конкретный системный заголовок.

Во-вторых, я вижу, что тест предназначен для макросов, которые отличаются тем, что говорят LINUX, один и один BSD. Я знаю, что это платформы. И тест - это или.

Итак, теперь я могу заключить, что если задано определение, связанное с одной из трех платформ, то мы включаем конкретный системный заголовок.

Punching sys/resource.h в мою любимую поисковую систему, я нахожу, что это часть Single UNIX Specification. И я замечаю, что все три платформы, упомянутые в макросе, имеют наследие UNIX.

Итак, в заключение, код, как представляется, содержит заголовок SUS на тех платформах, которые, как ожидается, будут иметь этот конкретный заголовок. В частности, не на Windows, который не будет иметь его.

Кстати, я бы предложил клонировать git-репозиторий на свой собственный компьютер, чтобы вы могли использовать на нем локальные инструменты поиска. Если вы собираетесь анализировать много кода, стоит создать среду, которая может содержать код и позволить вам скомпилировать и проанализировать его, а затем научиться использовать инструменты поиска и навигации, чтобы быстро обойти код.