e2 studioでビルドエラーが無いのに編集エラーが表示された時に試すと良いかも(workarounds for INDEXER/CODAN troubles)

こんにちは、NoMaYです。(すみません。7つに小分けして投稿します。)

e2 studioやEclipse/CDTでは、ビルドはエラー無く完了するのに、どういう訳か編集ウィンドウにエラーが表示されてしまうことがあります。今までずっとちょっと腑に落ちなかったのですが、別スレッドでの投稿をきっかけに1週間ほど調べてみて、まとまりの良さそうなところで一区切り付きましたので、分かったことを投稿します。(すみません。後でリンクを追加するかも知れない時にContent Under Reviewとならないよう少しマージンが欲しかったのと、画面コピーが多くて切れ目が分かり難いのとで、7つに小分けして投稿します。)

ビルドはエラー無く完了するのに、どういう訳か編集ウィンドウでエラーが表示されてしまう


この症状にはe2 studio(というかEclipse/CDT)のインデクサー(INDEXER)とコード解析(CODAN)という2つの機構が関係している(のは間違いないと思われる)のですが、調べているうちにe2 studio(というかEclipse/CDT)のワークスペースの設定をデフォルトから以下へ変更しておいた方が良さそうだということに気付きました。(理由は4つ後の投稿にて。)

ワークスペースの設定では Index all header variants を 有効 にしておいた方が良さそう


また、ワークスペース内に複数のプロジェクトがある場合には、他のプロジェクト、特に品種が異なるマイコンのプロジェクト、すなわちプロジェクト内のiodefine.hが異なるプロジェクト、を閉じておいた方が良さそうだということにも気付きました。(理由は6つ後の投稿にて。)

複数のプロジェクトがある場合、品種が異なるマイコンのプロジェクトは閉じておいた方が良さそう



更に、3つ後の投稿に書いたeclipse.orgのウェブサイトで見付けた情報からすると、利便性よりも、編集ウィンドウに原因不明のエラーが表示されないようにすることを優先したい場合には、以下の3つは無効にしておいた方が良いかも知れません。(もっとも、無効にしても、自分でメイクファイルを書いたのでなければ利便性はそれほど損なわれない、ような気がします。)

無効にしておいた方が良いかも知れないインデクサーオプション:
すべてのファイルに索引付け(ビルトもインクルードもなし) (英語表記 Index source files not included in the build)
未使用のヘッダーを索引付け (英語表記 Index unused headers)
Allow heuristic resolution of includes


ちなみに、トラブルを解決するヒントを与えてくれるかも知れないものとして、パーサーログファイルというものがあります。これは以下のようにして生成させることが出来ます。




resetprg.c.parser.log

Project:               rx64m_rsk_audio
File:                  file:/C:/Renesas/RX/issue_20170918/workspace_e2v600/rx64m_rsk_audio/r_bsp/board/rskrx64m/resetprg.c
Language:              GNU C
Index Version:         206.0
Build Configuration:   HardwareDebug
Context:               file:/C:/Renesas/RX/issue_20170918/workspace_e2v600/rx64m_rsk_audio/r_bsp/board/rskrx64m/resetprg.c
   C, {}
Versions in Index:     1
   C: {}; 5 macros, 2 includes, 240 names;

Include Search Path (option -I):
   E:\tools\micom\Renesas\CS+\CC\CC-RX\V2.03.00\\include
   C:\Renesas\RX\issue_20170918\workspace_e2v600\rx64m_rsk_audio\src
   。。。途中省略。。。
   C:\Renesas\RX\issue_20170918\workspace_e2v600\rx64m_rsk_audio\r_usb_hmsc\src\inc

Macro definitions (option -D):
   far=
   near=
   _far=
   _near=
   __BITRIGHT=1
   __CCRX__=1
   __DBL8=1
   __DOFF=1
   __evenaccess=
   __far=
   __FPU=1
   __INTRINSIC_LIB=1
   __LIT=1
   __near=
   __RENESAS_VERSION__=0x02030000
   __RENESAS__=1
   __RON=1
   __RX=
   __RX600=1
   __RXV2=1
   __STDC_HOSTED__=1
   __STDC_VERSION__=199901L
   __UBIT=1
   __UCHAR=1

Macro definitions (from language + headers in index):
   bool=_Bool
   brk()=_builtin_brk()
   BSC=(*(volatile struct st_bsc __evenaccess *)0x81300)
   BSP_BCLK_HZ=(BSP_SELECTED_CLOCK_HZ / BSP_CFG_BCK_DIV)
   。。。途中省略。。。
   ___BSP_PRV_IEN(x)=IEN ## x

Macro definitions (from files actually parsed):
   BSP_DECLARE_STACK=
   FPSW_init=(0x00000000)
   FPU_DENOM=0x00000100
   FPU_ROUND=0x00000000
   PSW_init=(0x00010000)
   PSW_init=(0x00030000)

Written on Mon Sep 25 06:16:06 JST 2017

 

Parents
  • こんにちは、NoMaYです。ほやさん、フォロー有難う御座います。

    唐突ですが、ここまでの内容を象徴するような(つまり厳密ではない)何か印象に残る例え話はないかと考えていて1つ思い付きました。

    映画や漫画で、大事な物を入れたカバンを持った主人公と、そのカバンと同じ色と柄のカバンを持った面識の無い人物が、廊下の曲がり角でぶつかって転んだ拍子にお互いのカバンを取り違えてしまい、いざ主人公がカバンの中からそれを取り出そうとすると、入っている筈の物が無くて困った事態になる、というストーリー展開がありますよね。

    ここまでの内容は、インデクサーが探索する範囲が狭いとか探索する場所が違うとか、そういった感じではなくて、むしろこんなような感じのことになるのかなぁ、と思いました、、、

    [追記]

    面識の無い人物という人物設定の他に、親子だったり、兄弟姉妹だったり、あるいは恋心を抱いている異性だったり、色々なバリエーションがありますね。あと、カバン以外に、同じロゴが印刷された封筒だったり、同じ包装のプレゼントだったり、とかもありますね。

Reply
  • こんにちは、NoMaYです。ほやさん、フォロー有難う御座います。

    唐突ですが、ここまでの内容を象徴するような(つまり厳密ではない)何か印象に残る例え話はないかと考えていて1つ思い付きました。

    映画や漫画で、大事な物を入れたカバンを持った主人公と、そのカバンと同じ色と柄のカバンを持った面識の無い人物が、廊下の曲がり角でぶつかって転んだ拍子にお互いのカバンを取り違えてしまい、いざ主人公がカバンの中からそれを取り出そうとすると、入っている筈の物が無くて困った事態になる、というストーリー展開がありますよね。

    ここまでの内容は、インデクサーが探索する範囲が狭いとか探索する場所が違うとか、そういった感じではなくて、むしろこんなような感じのことになるのかなぁ、と思いました、、、

    [追記]

    面識の無い人物という人物設定の他に、親子だったり、兄弟姉妹だったり、あるいは恋心を抱いている異性だったり、色々なバリエーションがありますね。あと、カバン以外に、同じロゴが印刷された封筒だったり、同じ包装のプレゼントだったり、とかもありますね。

Children
No Data