質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.04%

  • C

    2964questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

宇賀C言語プログラムを静的解析によって、関数とグローバル変数の関係性を洗い出したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 163

ogura87

score 79

先日、以下の質問をさせて頂きました。

その続きです。

ロジック内の関数や関数内で使用しているグローバルなどの解析を行うプログラムを作成したいのですが。。。
https://teratail.com/questions/104700

Eclipseの呼び出し階層の内容をEXCELにまとめる方法について
https://teratail.com/questions/105199

やりたい事は、プログラム内のグローバル変数がどの関数で値が書き込まれ、どの関数で読まれているかを一覧にまとめる事です。

例として、このようなEXCELの表を作りたいと思っています。

イメージ説明

この表でいくと、g_Patameter1というグローバル変数は、Function1で値が書き込まれ、Function3で値がよまれているという事がわかります。

このような表を完成させるために、静的解析プログラムを作成したいと思ったのですが難しすぎて挫折し、Eclispseの機能でコツコツやればできないこともないのですが、手作業では気の遠くなる時間がかかることと、人の手作業ではミスも起こるので、なんとかツールなどを使って効率よくできないものかと思っています。

また、ひとつ難しいのは、グローバル変数のアドレスがポインタ変数に渡った場合です。

この場合は、ポインタ変数の値を書き換えれば、間接的にグローバル変数の値を書き換えたことになるので、その場合も考慮できる必要があります。

ExcelipseのEclipseのコードリーディング機能を、VBAなどで捜査して、半自動化できるか、または、コードリーディングをマクロ的にちょっと手間が省ける方法だけでもわかるだけでもありがたいのですが。。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hichon

    2017/12/23 10:02

    タイトルが、えっちなのはいけないと思います!

    キャンセル

  • ogura87

    2017/12/23 14:55

    すいません!直しました!放送コードに引っかかる用語ではなかったのでよかったです!

    キャンセル

回答 1

checkベストアンサー

0

こんにちは。

回答ではないのですが。

この場合は、ポインタ変数の値を書き換えれば、間接的にグローバル変数の値を書き換えたことになるので、その場合も考慮できる必要があります。

静的解析では事実上不可能です。
そのポインタの値を決定するために外部からの入力値を使うこともあると思います。(といいますか、だからこそポインタ経由の場合が多いと思います。)その入力値も含めた解析は静的には行なえません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/23 08:45

    Chironian様

    ご回答ありがとうございます。
    では、単にそのグローバル変数に書き込まれている関数と読み込まれている関数だけでもわかるといいんですけどねぇ。

    ポインタに書き込まれている部分以外が明白になっただけでもかなり楽になりますので。。。

    キャンセル

  • 2017/12/23 12:13

    そこを許容できるのであれば、前回回答したlibToolingを使って、FunctionDeclとVarDeclを解析すればできます。
    もし、コンパイラの仕組みやC++にも興味をお持ちであれば、これを学ぶのは有用と思います。

    そうでない場合は、そこまで自力でやるのは費用対効果の面で疑問があります。お金を払って外部へ依頼することを検討した方が現実的と思いますよ。C++に熟練していない社員を一名投入する場合、恐らく数ヶ月以上かかると思います。それよりは安く品質も良いものが短期間で出来るのではないかと思います。

    キャンセル

  • 2017/12/23 14:50

    Chironian様

    ご回答ありがとうございます!

    libTooling、使ってみようと思います。
    ただ、ググったりAmazonで検索してみたりしたのですが、参考となる情報が少ないようです。

    これを使いこなせるようになるために、参考になる本、サイトなどはないでしょうか?

    キャンセル

  • 2017/12/23 14:53

    あ、すいません。
    前々回の回答でかなり参考のURLを載せて頂いていましたね。
    まずは、これで勉強してみようと思います。

    ありがとうございましたm(_ _)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    選択したクラスから実行できない

    最近PCを買い替え、Windows10にし、Eclipse(4.6.1)をインストールしなおしました。 しかし、その新たにインストールしたEclipseで複数クラスを作成し、

  • 受付中

    SUMIF 範囲指定での合算

    SUMIFで合計範囲を以下のように指定した時、 B2:C10 B列の値しか合算されず、これはSUMIFの仕様でしょうか? なんとかC列も合算させたいのですが、良い関数はあり

  • 解決済

    Excel 文字に値を設定

    ExcelでもJavaのようにA=5、B=2を設定しA+B=7のように計算できないのでしょうか?例えば この様な計算です。 方法があればご教示願います。

  • 解決済

    エクセル VBA 1つのセルの値を分けて、逆並びで列に配置

    教えてください。 F列2行目から例えば、 43x43x5(×は大文字のx(エックス)で代用してます。) というサイズ「縦x横x高さ」が入力されています。 これを数値ごと

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

  • 解決済

    excel2016 if文でのラベル付け

    お世話になっております。 excelのif文を使って↓のようなデータがあるものを ↓のようなd列のような状態にしたいです。(d1には1がもとから入っています。) 下記のをや

  • 解決済

    Excelで特定のセルに数字とカンマ以外の文字が入らないように制限したい

    いつも大変お世話になっております。 Excelバージョン Excel2016 表題の通り、Excelの特定のセルに数字とカンマ以外が入らないように制限をしたいのですが、 E

  • 受付中

    エクセル関数で数字のみを塊で抜き出したい

    前提・実現したいこと A列:数字(半角・全角を含む1文字以上)+文字列(漢字・半角全角英字等)から ※想定パターン(A1~A3セルの3パターン) B列:A列右から最初の数字(半角・

同じタグがついた質問を見る

  • C

    2964questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • トップ
  • Cに関する質問
  • 宇賀C言語プログラムを静的解析によって、関数とグローバル変数の関係性を洗い出したい