ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« 年越しそば | メイン | 02年のハイテク「これはちょっと考え物賞」を発表 »

TRACEで出力可能なのは半角512文字まで!




TRACEの実装

 TRACEマクロは Afx.h の中で以下のように定義されている。
#define TRACE              ::AfxTrace
 つまり AfxTrace() が呼ばれている。

 さらに AfxTrace() は Dumpout.cppの中で以下のように定義されている。
void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...)
{
#ifdef _DEBUG // all AfxTrace output is controlled by afxTraceEnabled
	if (!afxTraceEnabled)
		return;
#endif

	va_list args;
	va_start(args, lpszFormat);

	int nBuf;
	TCHAR szBuffer[512];

	nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);

	// was there an error? was the expanded string too long?
	ASSERT(nBuf >= 0);

	if ((afxTraceFlags & traceMultiApp) && (AfxGetApp() != NULL))
		afxDump << AfxGetApp()->m_pszExeName << ": ";
	afxDump << szBuffer;

	va_end(args);
}


出力可能なのは半角512文字まで!

 TRACEの定義で注目したいのが
	TCHAR szBuffer[512];
 の1文。512バイトしかバッファーを確保していないのでこれ以上の出力を行うこと ができない。実際に512バイト以上を表示しようとすると...
	// was there an error? was the expanded string too long?
	ASSERT(nBuf >= 0);
 この部分でアサーション・エラーが生じる。


制限をなくすには

#ifdef _DEBUG
	afxDump << szBuffer;
#endif
 を使えばいい。書式付にしたいなら以下のようにするだけ。
#ifdef _DEBUG
	CString	strTrace;
	strTrace.Format("%d",10);
	afxDump << strTrace;
#endif










Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報