こんにちは、
最新のユニバーサルctags(249c3c0c2a974ab03f7c307684563239096399a8)は、このコード(httpd2.4.18のinclude / ap_mpm.h)でシンボルap_os_create_privileged_process
を検出しません。
AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
const request_rec *r,
apr_proc_t *newproc,
const char *progname,
const char * const *args,
const char * const *env,
apr_procattr_t *attr,
apr_pool_t *p);
このコマンドは空の出力を返しました:
ctags -x --C-kinds=fpvx --languages=+C --language-force=C include/ap_mpm.h|grep ap_os_create_privileged_process
ただし、2016年5月7日以降のユニバーサルctagsのエディション(e5b7a2508db6e1374ea78a300cc9b45f4b26b02a)は、それを正しく検出しました。
ctags -x --C-kinds=fpvx --languages=+C --language-force=C include/ap_mpm.h|grep ap_os_create_privileged_process
ap_os_create_privileged_process prototype 107 include/ap_mpm.h AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-I
オプションでこれを修正することすらできません。 この場合、 OldC
パーサーを使用する必要があります。
ありがとうございました。
遅れてすみません。 質問があります。 e5b7a25はgitbisectによって見つかりましたか? か否か?
このバグは、 @ pragmawareが修正を依頼した関数の属性に取り組んだときに
これはバグですが、修正が難しいかもしれません。
今は修正する時間がありませんが、このバグは私の日常生活に影響を与えています。 とにかく時間を見つけます。
時間があれば、これを割り当てます。 つまり、担当者フィールドがnil( これを修正するための変更があります
パーサーはこの種のことについてヒューリスティックを持っているかもしれませんが、まあ、私は@pragmawareに、多くのことを壊すことなく、それが価値がある/実行
しかし、彼の新しいプリプロセッサを使用すると、 -D 'AP_DECLARE(t)=t'
問題を簡単に修正できます。
$ ./ctags -x --C-kinds=+p -D 'AP_DECLARE(t)=t' /tmp/1242.c
ap_os_create_privileged_process prototype 1 /tmp/1242.c AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
はい、パーサーのその部分は最初は「寛容」すぎて、それから私はそれを厳しすぎました。 真ん中のどこかに行く方法を見つけなければならないと思います。 今すぐ修正してみます。
@pragmaware 、ありがとう。
http://docs.ctags.io/en/latest/parser-cxx.html
への強力な-D
オプションについて書いてください。
ユーザーに-D
オプションを知らせるのはこれが初めてではありません。
#1245経由で閉鎖
Ctags 6e839be606cbc750e6e6a7e6d16fe375adbef5caは、このスタンドアロンシンボルを適切に検出します。 ただし、最初のヘッダーファイルには、このシンボルの次のプリアンブルが含まれています。
AP_DECLARE_HOOK(int, mpm, (apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf))
/**
* comment ...
*/
AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
const request_rec *r,
apr_proc_t *newproc,
const char *progname,
const char * const *args,
const char * const *env,
apr_procattr_t *attr,
apr_pool_t *p);
そして、何らかの理由で、この場合、ctagsはそれを検出しません。 この問題は#1251に関連している可能性があります。
うーん、このケースは他のケースを壊さずに修正するのはかなり難しいです。
つまり、古いバージョンのパーサーがこれをキャッチしましたが、他の場所で壊れました。