人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VC++ の勉強を始めたばかりでよくわからないので、教えて下さい。
以下を教えて下さい。

1.タイムスタンプ(HH:MM:SS)を表示させる方法
2. ライン数がを表示させる方法

VC++初心者向けの本に上記のようなものがありましたが、
System::Diagnostics::Debug::WriteLine("hogehoge");
引数がふたつしか取れません。(同時に表示できる変数は2つまで?)
もっとよいものがあれば教えて下さい。

ラインに限っていえば、こんなイメージ。
printf("filename = %s , line = %d\n",__FILE__,__LINE__ );
これに相当するものを知りたいです。


あと、トレースした部分をログファイルに書き出してくれる機能とか
あるのでしょうか?あれば教えてください。
(とりあえず、聞いてみてるだけです。)

VC++は、2008ExpressEditionと.NET 2003を使っています。

●質問者: futurista
●カテゴリ:コンピュータ
✍キーワード:.NET MM ss VC++ いもの
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●80ポイント ベストアンサー

VC++は、2008ExpressEditionと.NET 2003を使っています。

まず、最初に確認ですが、作成されたいアプリケーションのタイプは、

のどちらでしょうか?


「Visual C++ .NET 2003」「Visual C++ 2008 Express Edition」のどちらでも

「Windows ネイティブアプリケーション」「.NET アプリケーション」を作成可能ですが、

それぞれの開発環境により、利用可能なライブラリや構文が異なるので注意が必要です。


主なライブラリの使用用途としては、

という感じでしょうか。


「Visual C++ 2008 Express Edition」を使用されているということですので、

「CLR(VC++/CLI)」を使用して「.NET アプリケーション」を作成した場合について説明致します。

1.タイムスタンプ(HH:MM:SS)を表示させる方法

.NET のライブラリでは日付型を「HH:mm:ss」で書式化することで

「HH:MM:SS」の形式で表示されます。

■ @IT:.NET TIPS 日付や時刻を文字列に変換するには? - C# VB.NET
http://www.atmarkit.co.jp/fdotnet/dotnettips/200customdate/

2. ライン数を表示させる方法

StackTrace を用いることでファイル名、行番号が取得可能です。

ただし、最適化の関係で、デバッグ版でしか正しい行番号が取得できないようです。

■ StackTrace クラス (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.stack...

トレースした部分をログファイルに書き出してくれる機能

DefaultTraceListener にて出力先のファイル名を指定することで、

トレースした内容をログファイルに出力することが可能です。

■ @IT:.NET TIPS デバッグ・メッセージをファイルに出力するには? - C# VB.NET VS.NET
http://www.atmarkit.co.jp/fdotnet/dotnettips/146debugonfile/debu...

以下は、サンプルになります。

Release ビルドでも Debugt::WriteLine() でファイル出力してしまうようですので、#if defined(_DEBUG) を用いて Debug ビルド時のみ出力するようにしています。

// File : DebugWriteLineTest.cpp
// Compile : cl DebugWriteLineTest.cpp /clr /D "_DEBUG" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" [Enter]
// Usage : DebugWriteLineTest.exe [Enter]
using namespace System;
using namespace System::Diagnostics;

int main(array<System::String ^> ^args)
{
#if defined(_DEBUG)
 // ■ @IT:.NET TIPS デバッグ・メッセージをファイルに出力するには? - C# VB.NET VS.NET
 // http://www.atmarkit.co.jp/fdotnet/dotnettips/146debugonfile/debugonfile.html
 DefaultTraceListener^ dtl = (DefaultTraceListener^)Debug::Listeners["Default"];
 dtl->LogFileName = "C:\\TEMP\\debug.txt";
#endif

 // ■ @IT:.NET TIPS 日付や時刻を文字列に変換するには? - C# VB.NET
 // http://www.atmarkit.co.jp/fdotnet/dotnettips/200customdate/customdate.html
 DateTime^ dt = DateTime::Now;
 Debug::WriteLine( "DateTime: " + dt->ToString("HH:mm:ss") );

 // ■ StackTrace クラス (System.Diagnostics)
 // http://msdn.microsoft.com/ja-jp/library/system.diagnostics.stacktrace.aspx
 StackTrace^ st = gcnew StackTrace(true);
 StackFrame^ sf = st->GetFrame(0);
 Debug::WriteLine( "File: " + sf->GetFileName() );
 Debug::WriteLine( "Line Number: " + sf->GetFileLineNumber().ToString() );

 Debug::WriteLine( "Hello World" );
 return 0;
}

<実行結果(C:\TEMP\debug.txt の内容)>

DateTime: 19:19:36
File: c:\home\edu\vs2008\vc9\clr\debugwritelinetest\debugwritelinetest\debugwritelinetest.cpp
Line Number: 19
Hello World
◎質問者からの返答

丁寧なご回答有難うございます。

幾つかリンク切れがあり、参照できないページがありましたが、

サンプルコードを組み込み、動作させたところ、概ね出来ました。

但し、行数表示に関しては、

Debug::WriteLine( "Line Number: " + sf->GetFileLineNumber().ToString() );

の行番号ではなく、

StackTrace^ st = gcnew StackTrace(true);

の行番号が表示されました。

ご指摘の通り、最適化の関係で、デバッグ版でしか正しい行番号が取得できない

ということでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ