Skip to content

Для тех, кто коммитит

akruphi edited this page Jun 15, 2024 · 12 revisions

Для тех, кто коммитит

Note: смотреть CHM в Linux, например, через xCHM (наиболее корректно) или через Okular — просмотр CHM как подряд идущих страниц, но возможны сбои рендеринга текста ссылок и области щелчка по ним.

  • Описание различий/дополнительных возможностей far2l API: https://github.com/elfmz/far2l/blob/master/HACKING.md

  • О форматировании кода:

    • https://github.com/elfmz/far2l/blob/master/CODESTYLE.md
    • https://github.com/elfmz/far2l/pull/1864#issuecomment-1738077196

      В новом коде (новые функции) переменные - snake_case, функции - CamelCase. Если изменение в старом коде - то лучше подстраиваться под то что есть. Старый код надо будет когда нибудь в светлом будущем автоматически переформатировать (clang-tidy как я понимаю это умеет). Но тут с отступами была целая эпопея, включавшая в себя кастомный clang-format, так что передеделывать имена переменных чета вообще боязно) Но придется..

  • Про исторически сложившиеся разные строковые типы (FARString, std::wstring, TCHAR,...) и их использование: https://github.com/elfmz/far2l/issues/802#issuecomment-1694758391

  • String encoding functions in far2l code: https://github.com/elfmz/far2l/discussions/1063

  • Отладочные fprintf с выводом логов в терминал или в файл

    • включение вывода логгирования и выбор куда: https://github.com/elfmz/far2l/wiki/Running-far2l-with-debug-logging-enabled
      • в терминале export FAR2L_STD=/path/to/log для лога в файл или export FAR2L_STD=- для лога в stdout терминала, также по необходимости export NETROCKS_VERBOSE=9 и затем в этом же терминале запустить far2l
    • отладочная печать в коде: fprintf(stderr, "муа-ха-ха %i", 42); и т.п.
      • шпаргалка по выводу в консоль всего зоопарка строковых типов far2l [нажмите, чтобы развернуть/скрыть]
        // null-terminated strings (c-strings) made of chars
        // (examples below should also work with LPSTR/LPCSTR/CHAR)
        
        char *sample;
        fprintf(stderr, "%s\n", sample);
        
        char sample[fixed_length_in_bytes_plus_one_for_terminating_zero];
        fprintf(stderr, "%s\n", sample);
        
        // null-terminated strings (c-strings) made of wide chars
        // (examples below should also work with LPWSTR/LPCWSTR/LPTSTR/LPCTSTR/WCHAR/TCHAR)
        
        wchar_t *sample;
        fprintf(stderr, "%ls\n", sample);
        
        wchar_t sample[fixed_length_in_wide_chars_plus_one_for_terminating_zero];
        fprintf(stderr, "%ls\n", sample);
        
        // standard C++ classes for strings
        // for accessing class methods via pointer to object of that class replace "." with "->"
        
        std::string sample;
        fprintf(stderr, "%s\n", sample.c_str());
        
        std::wstring sample;
        fprintf(stderr, "%ls\n", sample.c_str());
        
        // Far internal string class
        
        FARString sample;
        fprintf(stderr, "%s\n", sample.GetMB().c_str());
        fprintf(stderr, "%ls\n", sample.CPtr());
        
        UnicodeString sample;
        fprintf(stderr, "%s\n", sample.GetMB().c_str());
        
        // string classes used in Colorer
        // (examples below should also work with CString and DString classes)
        
        String sample;
        fprintf(stderr, "%ls\n", sample.getWChars());
        
        SString sample;
        fprintf(stderr, "%ls\n", sample.getWChars());
        
        // wxString
        wxString sample;
        fprintf(stderr, "%s\n", sample.ToStdString().c_str());
        //or
        fprintf(stderr, "%s\n", sample.mb_str().data());
        //or
        fprintf(stderr, "%ls\n", static_cast<const wchar_t*>(sample.wc_str()));
        

        Про wxString: https://docs.wxwidgets.org/3.0/classwx_string.html#string_vararg

  • Про отладочную информацию из gdb:

    • https://github.com/elfmz/far2l/issues/856#issuecomment-742854104

      • запустите графический вариант под дебаггером: gdb far2l и далее
        • run
        • дождитесь падения
        • bt
        • напишите результат сюда
    • https://github.com/elfmz/far2l/issues/557#issuecomment-506029522

      • gdb far2l
      • type run in gdb console -> far2l will be launched
      • repro issue
      • return back to gdb console, hit ctrl+c then type thread apply all bt and send what will be printed out there
    • другие подробности по работе с gdb [нажмите, чтобы развернуть/скрыть]
      • https://github.com/elfmz/far2l/issues/1003#issuecomment-869060945

        откройте терминал, в нем запустите gdb far2l, когда откроется far2l - воспроизведите зависон, когда зависнет - перейдите в терминал с gdb, ткните там Ctrl+C, потом в появившейся ком строке дебаггера напишите thread apply all bt, после чего - полную распечатку результата выложите здесь

      • https://github.com/elfmz/far2l/issues/1257#issuecomment-1044606817

        запустите far2l под gdb - в терминале напишите: gdb far2l после того как gdb раздуплится - напишите в его консоли команду run ... в консоли gdb нажмите Ctrl+C и после того как там появится ком строка - напишите в нее thread apply all bt и результат расшарьте если не жалко

      • https://github.com/elfmz/far2l/issues/1248#issuecomment-1039176746

        запустить far2l под gdb написать в gdb run, спровоцировать крэш, и когда в gdb появится чтото типа поймали SIGSEGV за хвост - то надо там (в gdb) написать команду bt

      • https://github.com/elfmz/far2l/issues/567#issuecomment-510202714

        please run far2l under gdb by executing in terminal:

        gdb far2l

        then type in gdb console:

        run

        After that reproduce issue in opened far2l window, and once far2l hang, switch back to terminal with gdb, then hit Ctrl+C there and type following command:

        thread apply all bt

        ..and report its output

Clone this wiki locally