C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: visual stdio ウォッチ画面


(過去ログ 139 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■81973 / inTopicNo.1)  visual stdio ウォッチ画面でchar型の値にゴミ
  
□投稿者/ MAC (6回)-(2016/11/25(Fri) 23:33:16)

分類:[C/C++] 

Visual Stdio 2015を使用しています。

C++, Cはある程度の経験があります。

visual stdio はまだ使用し始めて数か月程度です。
もしどなたか理由がわかる方がいらっしゃいましたら教えてください。

以下のようなC++のコードを実行し、

tmp classのメンバをデバッガのウォッチ画面で閲覧すると、
char や unsigned char のメンバの値にゴミが表示されます。
これはなぜ発生するのでしょうか?

C++の環境であればchar型は普通に扱えるとの理解をしているので、
なぜこのような挙動になるかが不思議に思っています。

デバッガの設定方法の問題であるのか、コードがマズイのか、
Visual Stdio の仕様なのか、もしご存じの方がいらっしゃいましたら
ご教授くださいませ。

例: 
clock_class	1 '\x1'	unsigned char
priority2	248 '・'	unsigned char
log_sync_interval	-3 '&#63729;'	char
log_announce_interval	0 '\0'	char

(スクリーンキャプチャ)
http://www.mediafire.com/view/z3m9hn8kb5i63gm/visual_stdio_watch1.png

補足: 
- C++/CLI の環境で、参照型(public ref struct test_class)で記述してもも発生しました。
  C#では、8bitの型がないようなので、試していません。)

-------------------------------------------------------
コード: 

#include "stdafx.h"
#include "stdint.h"

struct test_class{
public:
	uint16_t descriptor_index;
	uint16_t localized_description;
	uint64_t mac_address;
	uint16_t interface_flags;
	uint64_t clock_identity;
	uint8_t priority1;
	uint8_t clock_class;
	uint16_t offset_scaled_log_variance;
	uint8_t clock_accuracy;
	uint8_t priority2;
	uint8_t domain_number;
	int8_t log_sync_interval;
	int8_t log_announce_interval;
	int8_t log_pdelay_interval;
	uint16_t port_number;
};

int main()
{
	test_class * tmp = new test_class;

	tmp->descriptor_index = 0;
	tmp->localized_description = 65535;
	tmp->mac_address = 0x22970405b7;
	tmp->interface_flags = 0x7;
	tmp->clock_identity = 0x2297fffe0405b7;
	tmp->priority1 = 0;
	tmp->clock_class = 1;
	tmp->offset_scaled_log_variance = 17258;
	tmp->clock_accuracy = 32;
	tmp->priority2 = 248;
	tmp->domain_number = 0;
	tmp->log_sync_interval = -3;
	tmp->log_announce_interval = 0;
	tmp->log_pdelay_interval = 0;
	tmp->port_number = 1;

<- ここでデバッガでブレイク

	delete tmp;

    return 0;
}

-------------------------------------------------------


引用返信 編集キー/
■81974 / inTopicNo.2)  Re[1]: visual stdio ウォッチ画面
□投稿者/ Azulean (733回)-(2016/11/25(Fri) 23:56:22)
2016/11/25(Fri) 23:59:15 編集(投稿者)

No81973 (MAC さん) に返信
> tmp classのメンバをデバッガのウォッチ画面で閲覧すると、
> char や unsigned char のメンバの値にゴミが表示されます。
> これはなぜ発生するのでしょうか?

ゴミというより、char 型が「文字」として扱われることが多いゆえに、文字を表示しているだけでは…?

> デバッガの設定方法の問題であるのか、コードがマズイのか、
> Visual Stdio の仕様なのか、もしご存じの方がいらっしゃいましたら
> ご教授くださいませ。

仕様でしょうね。
ウォッチの変数名の後に文字を加えるなどで書式はある程度コントロールすることもできますが。
http://srz-zumix.blogspot.jp/2014/01/visual-studio-10.html


// 一応、下記の仕組みはあるものの、デフォルトを変えられるかは未実験。
// https://msdn.microsoft.com/en-us/library/jj620914.aspx

// 余談:C# は byte と sbyte が 8bit 型です。
引用返信 編集キー/
■81976 / inTopicNo.3)  Re[2]: visual stdio ウォッチ画面
□投稿者/ MAC (7回)-(2016/11/26(Sat) 15:02:07)
コメントありがとうございました。

■No81974 (Azulean さん) に返信
> 2016/11/25(Fri) 23:59:15 編集(投稿者)
> 
> ■No81973 (MAC さん) に返信
>>tmp classのメンバをデバッガのウォッチ画面で閲覧すると、
>>char や unsigned char のメンバの値にゴミが表示されます。
>>これはなぜ発生するのでしょうか?
> 
> ゴミというより、char 型が「文字」として扱われることが多いゆえに、文字を表示しているだけでは…?
> 

>>デバッガの設定方法の問題であるのか、コードがマズイのか、
>>Visual Stdio の仕様なのか、もしご存じの方がいらっしゃいましたら
>>ご教授くださいませ。
> 
> 仕様でしょうね。
ですよね。。。そう考えることにします。

> ウォッチの変数名の後に文字を加えるなどで書式はある程度コントロールすることもできますが。
> http://srz-zumix.blogspot.jp/2014/01/visual-studio-10.html
> 
> 
> // 一応、下記の仕組みはあるものの、デフォルトを変えられるかは未実験。
> // https://msdn.microsoft.com/en-us/library/jj620914.aspx
> 
> // 余談:C# は byte と sbyte が 8bit 型です。

了解です。

ありがとうございました。
すくなくともcodeが悪いわけではなさそうなので、安心しました。
本件Closeします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -