CrystalDiskInfoやCrystalDiskMarkなどCrystal Dew World製品に関する総合掲示板です。
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム  
13 / 171 ツリー    ←次へ | 前へ→

CrystalDiskInfo 8.8.6 のソースコードについて(バグ?) G神 20/9/18(金) 6:41
Re:CrystalDiskInfo 8.8.6 のソースコードについて(... ひよひよ 20/9/22(火) 7:52
これは「JMicron/E9表示問題」「CDIセーブ画像問題」に... 金華山の仙人 20/9/22(火) 14:57
Re:これは「JMicron/E9表示問題」「CDIセーブ画像問題... G神 20/9/22(火) 20:51
「JMicron/E9表示問題」「CDIセーブ画像問題」への影響... 金華山の仙人 20/9/24(木) 11:12

CrystalDiskInfo 8.8.6 のソースコードに...
 G神  - 20/9/18(金) 6:41 -
CrystalDiskInfo 8.8.6 のソースコードについてお尋ねします。

856行目:

「m_bDumpSmartReadData」は、「m_bDumpSmartReadThreshold」の間違いでは
ないかと思いますが、いかがでしょうか?

【誤】
-----------------
> if(m_bDumpSmartReadData && (m_Ata.vars[i].DiskVendorId != m_Ata.SSD_VENDOR_NVME))
-----------------

【正】
-----------------
> if(m_bDumpSmartReadThreshold && (m_Ata.vars[i].DiskVendorId != m_Ata.SSD_VENDOR_NVME))
-----------------

SMART情報をファイルへ保存する処理が実装されている「DiskInfoDlgCopy.cpp」内の、CDiskInfoDlg::SaveText()メンバ関数内で、メンバ変数「m_bDumpSmartReadThreshold」
を参照している部分がありません。

引用なし

パスワード


・ツリー全体表示

Re:CrystalDiskInfo 8.8.6 のソースコード...
 ひよひよ E-MAIL  - 20/9/22(火) 7:52 -
▼G神さん:
>CrystalDiskInfo 8.8.6 のソースコードについてお尋ねします。
>
>856行目:
>
>「m_bDumpSmartReadData」は、「m_bDumpSmartReadThreshold」の間違いでは
>ないかと思いますが、いかがでしょうか?
>
>【誤】
>-----------------
>> if(m_bDumpSmartReadData && (m_Ata.vars[i].DiskVendorId != m_Ata.SSD_VENDOR_NVME))
>-----------------
>
>【正】
>-----------------
>> if(m_bDumpSmartReadThreshold && (m_Ata.vars[i].DiskVendorId != m_Ata.SSD_VENDOR_NVME))
>-----------------
>
>SMART情報をファイルへ保存する処理が実装されている「DiskInfoDlgCopy.cpp」内の、CDiskInfoDlg::SaveText()メンバ関数内で、メンバ変数「m_bDumpSmartReadThreshold」
>を参照している部分がありません。
ご連絡ありがとうございます。ご指摘の通り、m_bDumpSmartReadThresholdとすべき部分でした。

次のバージョンで修正させていただきます。

引用なし

パスワード


・ツリー全体表示

これは「JMicron/E9表示問題」「CDIセーブ画...
 金華山の仙人  - 20/9/22(火) 14:57 -
▼ひよひよさん:

>ご連絡ありがとうございます。ご指摘の通り、m_bDumpSmartReadThresholdとすべき部分でした。
>
>次のバージョンで修正させていただきます。

このバグって、「俺環」「Win環」で解決保留?(困難?)になってる、下記の「JMicron/E9表示問題」や「CDIセーブ画像問題」に関係しそうでしょうか?

https://crystalmark.info/board/c-board.cgi?cmd=one;no=1913;id=#1913

https://crystalmark.info/board/c-board.cgi?cmd=ntr;tree=1956

特定のDataが未設定になってる、ってのが、環境によって問題発生が変化するバグの原因として、結構怪しい気がしますが。

引用なし

パスワード


・ツリー全体表示

Re:これは「JMicron/E9表示問題」「CDIセー...
 G神  - 20/9/22(火) 20:51 -
▼金華山の仙人さん:
>このバグって、「俺環」「Win環」で解決保留?(困難?)になってる、下記の「JMicron/E9表示問題」や「CDIセーブ画像問題」に関係しそうでしょうか?

こんばんは。

指摘のバグは、SMART値のスレッショルドテーブルを出力するか否か、本来であれば「編集」-「コピーオプション」-「SMART_READ_THRESHOLD」メニューのチェックON/OFF状態に従うべきところを、「SMART_READ_DATA」チェック状態のON/OFFで判定しているというものです。

そのため「SMART_READ_DATA」がOFFの状態で、「SMART_READ_THRESHOLD」のみONにしても、スレッショルドテーブルはファイル出力等されず、「SMART_READ_DATA」がONの状態なら、「SMART_READ_THRESHOLD」のON/OFFに関係なく、スレッショルドテーブルが出力されるという動きになります。

それ以外の挙動に対しては、関係はないと思います。

ただ、気になったのが、プログラムの中核的なデータである、ATA_SMART_INFO を構造体として宣言していますが、コンストラクタが定義されていません。(Cと違いC++ではclassとstructはメンバのデフォルトの扱いがpublicか否かでほぼ同じ。class同様コンストラクタやデストラクタも定義できます)

そのためATA_SMART_INFO型の変数を使う都度、明示的に初期化しない限り、構造体メンバ変数の初期値が不定になるため、それが廻り廻って再現性のないバグの原因になっている可能性はあります。

ATA_SMART_INFO が構造体のままでも、とりあえずコンストラクタを定義することは可能です。 再現性のないバグを排除する目的なら、全てのメンバを自動で初期化するため、早急にコンストラクタを定義することと、併せて代入演算子(operator =)や、複製を作るコピーコンストラクタを定義した方がよいと思います。

あと気になったのは、APIの呼び出し結果をチェックせずにその後の処理を行っているとかですね。
APIによっては、特定条件下で呼び出した場合、必ず失敗するとかありますから。

引用なし

パスワード


・ツリー全体表示

「JMicron/E9表示問題」「CDIセーブ画像問題...
 金華山の仙人  - 20/9/24(木) 11:12 -
▼G神さん:
返信と説明有難う御座います。

>指摘のバグは、SMART値のスレッショルドテーブルを出力するか否か、本来であれば「編集」-「コピーオプション」-「SMART_READ_THRESHOLD」メニューのチェックON/OFF状態に従うべきところを、「SMART_READ_DATA」チェック状態のON/OFFで判定しているというものです。
>
>そのため「SMART_READ_DATA」がOFFの状態で、「SMART_READ_THRESHOLD」のみONにしても、スレッショルドテーブルはファイル出力等されず、「SMART_READ_DATA」がONの状態なら、「SMART_READ_THRESHOLD」のON/OFFに関係なく、スレッショルドテーブルが出力されるという動きになります。
>
>それ以外の挙動に対しては、関係はないと思います。

3割位?しか理解出来てませんが、直接関係無い事は分かりました。


>ただ、気になったのが、プログラムの中核的なデータである、ATA_SMART_INFO を構造体として宣言していますが、コンストラクタが定義されていません。(Cと違いC++ではclassとstructはメンバのデフォルトの扱いがpublicか否かでほぼ同じ。class同様コンストラクタやデストラクタも定義できます)
>
>そのためATA_SMART_INFO型の変数を使う都度、明示的に初期化しない限り、構造体メンバ変数の初期値が不定になるため、それが廻り廻って再現性のないバグの原因になっている可能性はあります。

そうそう。(~_~;)

初期化してないDataのせいで、再現環境が分らなかったり一定しなかったり、っていうのは、それなりにプログラム開発の仕事に従事してた経験で、よーーーーーく分かります。

>ATA_SMART_INFO が構造体のままでも、とりあえずコンストラクタを定義することは可能です。 再現性のないバグを排除する目的なら、全てのメンバを自動で初期化するため、早急にコンストラクタを定義することと、併せて代入演算子(operator =)や、複製を作るコピーコンストラクタを定義した方がよいと思います。
>
>あと気になったのは、APIの呼び出し結果をチェックせずにその後の処理を行っているとかですね。
>APIによっては、特定条件下で呼び出した場合、必ず失敗するとかありますから。

丁度、職場にC言語が導入されかけた頃に、プログラム開発の仕事から離れたせいで、専門的な事は分かりませんが、何となーーーく分かりますねぇ。(^o^;)

引用なし

パスワード


・ツリー全体表示

13 / 171 ツリー    ←次へ | 前へ→
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム  
 78556
ページ:  ┃  記事番号:  

C-BOARD Moyuku v1.03b3