[過去ログ] Visual Studio 2008 Part 22 (314レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
285: 2018/09/17(月)09:44 ID:yu1Dprt2(1) AAS
>>284
同一のreleaseをコンソールで実行するかデバッガで実行するかで結果が異なるのはなぜだろう。
という話をしていたのであって、
debug/releaseで別の結果になることを問題にしているのではないです。
286
(1): 2018/09/17(月)10:25 ID:+dwRu2dr(3/8) AAS
>>191がコンソール起動とIDE起動で挙動が異なる理由は分かりました。
ありがとう。

結論はつまり以下だ。
> JIT の最適化とデバッグ(抜粋)
> マネージ アプリケーションをデバッグするとき、Visual Studio では、既定で、
> ジャスト イン タイム (JIT: Just-In-Time) コードの最適化が省略されています。
> 最適化されたコードをデバッグするのは困難であるため、
> 最適化されたコードで発生するバグが、非最適化バージョンでは再現しないときにのみお勧めします。
> JIT 最適化は、Visual Studio の [モジュールの読み込み中に JIT 最適化を抑制する] オプションで制御されます。
> 実行中のプロセスにアタッチする場合、既に読み込まれ、JIT でコンパイルされ、
省4
287: 2018/09/17(月)10:25 ID:+dwRu2dr(4/8) AAS
その他諸々、話を整理すると、以下となる。(ソースは>>191参照)
1. managedコードではMSILが出力され、x86コードは含まれていない。
2. 起動時、MSILはJITされ、x86コードに落とされる。
3. このため、mainの1行目でブレークポイントで止め、calc_norm_and_regulateの逆アセンブルを見ようとしても、
 IDE上で「逆アセンブルを表示できません。式がまだネイティブ マシン コードに翻訳されていません。」と出る。
 これはmainの1行目に System::Diagnostics::Debugger::Launch(); を入れたときも同様。
4. そしてこのJITに関して、上記IDE中の 『[モジュールの読み込み中に JIT 最適化を抑制する] オプション』 が効いてくる。
 規定ではオフ、つまり、ReleaseビルドでもIDE起動ならJIT最適化は抑制される。
 これがfld/fmul/fadd/fstpのループコードになる理由。
 これをオンにすれば、確かにReleaseビルドIDE起動でも、
省12
288
(1): 2018/09/17(月)10:28 ID:dj7qSZnZ(12/17) AAS
同じリリースビルドで
結果がかわってんのになにいってんの?

fprintf入れるだけで
リリースビルドで結果が変わる
289: 2018/09/17(月)10:31 ID:dj7qSZnZ(13/17) AAS
やはり低学歴知恵遅れは
結果が意味するところが分かってないわ。。。
290: 2018/09/17(月)10:32 ID:dj7qSZnZ(14/17) AAS
ちなみにオレがあげた結果は
すべてリリースビルドの結果だからな
デバッグビルドの結果なんかあげても
意味ないからな
291: 2018/09/17(月)10:38 ID:dj7qSZnZ(15/17) AAS
CLRのケースもCLRでない普通のexeのケースでも
結果はまったく同じだからな

しかもすべてリリースビルドで
おきてる誤差までぴったり一致してる
292
(1): 2018/09/17(月)10:52 ID:+dwRu2dr(5/8) AAS
>>288
お前は相変わらず理解してないな。

80bit(拡張倍精度)と64bit(倍精度)の演算で桁落ちが異なり、結果が異なるのは当然なんだよ。
問題は同じバイナリの癖に何故起動方法によって異なるのか?だったんだ。

理由はMSILだからだ。
MSILはCLR上でJITされ、x86コードに落とされる。
このときにJIT最適化がかかれば、拡張倍精度(を保ったまま)のコードになるし、
最適化がかからず毎回メモリに書き戻していれば、倍精度のコードになる。
.NETにおける同一バイナリってのは、同一MSILという意味であって、同一x86機械語という意味ではない。
だから、確かに同一バイナリを掴んでいたが、起動方法によって結果が異なっていたんだよ。
省9
293: 2018/09/17(月)10:54 ID:+dwRu2dr(6/8) AAS
× fprint
○ printf
まあ、分かると思いますが
294: 2018/09/17(月)10:57 ID:dj7qSZnZ(16/17) AAS
で、最適化されてるかされてないかすら
いまのいままで気付くことすらできない
そして気付く方法すらわからなかったわけか

うあわ
頭わるう。。。

キミ、プログラムくむの向いてないわ
295: 2018/09/17(月)10:58 ID:dj7qSZnZ(17/17) AAS
問題の切り分けができない人は
プログラムはくめない

コレは定説だからな
296: 2018/09/17(月)11:09 ID:ivGPGa/P(1) AAS
>>286
なるほど面白いね。

レスが膨大過ぎて最初の方しか読んでなかったけど、ネイティブコードの話と思い込んでたら
.NETの話だったのかw
297: 2018/09/17(月)12:34 ID:yaPtorLJ(6/7) AAS
個人的には、C++やx87 FPUは割と知識があったけど、.NET関連は余り追いかけてなかったので、気づくのが遅れた。

managedコード、unmanagedコードについて、今回初めて調べてみたくらいだし。
298: 2018/09/17(月)12:53 ID:yaPtorLJ(7/7) AAS
>>292
ID:dj7qSZnZ」の人は理解していないね。
彼は人の事馬鹿にしてるけど・・・。
299: 2018/09/17(月)13:39 ID:F2vzl5VC(1) AAS
最初に指摘されたことだろうに。
アセンブラレベルで精度や効率に介入したきゃ.netなんて使うな、なんて分かりきったこと。
300
(1): 2018/09/17(月)14:58 ID:zCVYDMXL(1/2) AAS
エディタ使ってるとたまに Intellisense機能が効かないときがあるんだが
あれなんなの?
中間ファイルとか消せば直るの?
301
(1): 2018/09/17(月)17:03 ID:+dwRu2dr(7/8) AAS
>>300
はい。よく壊れます。
> [C++] There is an issue with the .ncb file
> Close the solution.
> Delete the . ncb file.
> Reopen the solution.
> Reopening the solution creates a new . ncb file.
> 外部リンク:msdn.microsoft.com
302: 2018/09/17(月)17:17 ID:zCVYDMXL(2/2) AAS
>>301
なるほど .ncbファイルね
今度消してやってみるわ
303: 2018/09/17(月)18:30 ID:+dwRu2dr(8/8) AAS
さて俺の本番コード、以下のようだ。
疑問は解消した。協力してくれた皆様ありがとう。

◎:拡張倍精度、○:倍精度、として、(ソースは>>191参照)
・Releaseビルドをコマンドプロンプトから起動→◎積和、◎平方根
・Debugビルドをコマンドプロンプトから起動→◎積和、○平方根
・IDEから起動→○積和、○平方根

これで3種類出来上がってた。
(なお、>>166内バイナリをアタッチした際の「AまたはC」は、「AまたはB」の間違い)
そしてIDE上で『[モジュールの読み込み中に JIT 最適化を抑制する]』を変更すると、
確かにRelease/Debugの2種類に絞れる。
省19
304
(1): 2018/09/19(水)17:24 ID:GzaYiinu(1) AAS
VC++2008だけど、突然一部のファイルだけブレークポイントが入らなくなった・・・
.ncb消したり、そのプロジェクトだけリビルドしたけど直らない
全リビルドすればおk?
305
(1): 2018/09/19(水)18:59 ID:KTUM/Tgt(1) AAS
>>304
根本的な解決策とは違うが
「ブレークポイントは現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。」
なら
[オプション] の[デバッグ]から[元のバージョンと完全に一致するソース ファイルを必要とする] をオフで
306: 2018/09/20(木)12:44 ID:rLmEYUhk(1) AAS
>>305
ありがとうございます。

結局、全リビルドでも直らなかったので、.sln と .vcproj 以外全部消して
Windowsも再起動して完全にまっさらな状態にして全ビルドしたら直りましたが、
そのうちまたブレークポイントが入らなくなったので、>>305の方法で
回避しました。
307: 2019/06/19(水)14:12 ID:Yoy0IPRe(1) AAS
お、おう
308: 2019/10/04(金)14:14 ID:gozwERy2(1) AAS
C++ CLRのWindowsフォームアプリ作ってると、
イベントとか記入するときインデントがおかしい(スペースが1つ付く)んですが、
これを直す方法ってありますか?
309
(1): 2019/10/06(日)21:09 ID:xhkeezXX(1/2) AAS
テンプレート特殊化ってVisualC++2008 SP1 ではできないですか?
310: 2019/10/06(日)21:48 ID:xhkeezXX(2/2) AAS
>309
外部リンク[html]:programming-place.net
こちらでできました、スレ汚しすみません
311
(1): 2021/04/20(火)20:00 ID:rVJPu0WM(1) AAS
わからないので教えてください。
シリアル通信をするプログラムを作りたく、
VS2008にて、「SerialPort」を使え、というのが
サイトにあったのですが、
ツールボックスにSerialPortがありません。
追加する方法を教えてください。

使用環境:VS2008 C++ MFCアプリケーション
312: 2021/04/20(火)20:36 ID:mPkgRyxP(1) AAS
ねぇねぇ今日は何処まで逝こうかな〜

COMはネイティブなのかね
313: 2021/04/23(金)21:39 ID:OsunfFOw(1) AAS
>>311
SerialPortは使ったこと無いから知らんが、
その程度のことを自力で解決出来ない奴が今更VS2008でしかもMFCとか無理だ。
サイトを参考にするのもいいが、日付は必ず見るようにしろ。
.NET serial port で検索すると以下が当たるし、今なら普通にこれだと思うが。
外部リンク:docs.microsoft.com

どうせ見えた展開だし、面倒だから先に言っておくが、
お前のやってることは初心者のあるある

・そもそもやり方を間違っているのに、それ以外の解決方法を認めない
・正しいやり方を教えても、それは聞いてないとして受け付けない
省5
314: 2022/02/16(水)02:27 ID:ky7QDxn6(1) AAS
記念カキコ
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.012s