kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

デバッグに便利な拡張機能RevDeBug

はじめに

RevDebugという会社から「RevDebugってツールあるんだけど」と案内が来たので、試しに使ってみました。ProfilingTime Machineデバッグ情報の共有とかはチーム開発するときに便利そうです。

.NET Core 2.0以降や.NET Framework 4.5以降のサポートだそうです。既知の問題もちょっとあるのでこれに該当する人は少し待ちましょう。

Requirements for RevDeBug

  • いくつかのC# / VB.NET 15.0構文をサポートしていない
  • ASP.NET Core/ASP.NET MVCのUnhandled exceptionsが記録されない
  • ASP.NET Coreのhttpリクエストが記録されない
  • References with aliases other than global are not supported.
  • アンチウィルスのAvastを使っている場合、デバッグが記録されないので、ホワイトリストに入れて

Value Prompts

Value Prompts

これは無償版でも使える機能ですね。いちいちローカルやウォッチウィンドウを開かなくても変数の上に現在の値を表示してくれます。OzCodeにも同じような機能があります。

Monitoring

Monitoring

すべての例外を一か所のウィンドウで確認する機能ですね。メニューのReDebugからExceptions/Searchを表示します。

Profiling

Profiling

  • 実行範囲の上位10メソッドを円グラフで表示
  • もっとも呼び出されている上位5メソッドを棒グラフで表示
  • エディタの行番号の隣に処理時間に応じて色付けされる
  • RevDeBugメニューのPerformanceをクリックすると、呼び出し回数、処理時間をまとめて表示するウィンドウが表示

結構便利そうですね。

Time Machine

Time Machine

IntelliTraceをもっと便利にしたTime Machineといえばいいんでしょうか。矢印記号をクリックすれば前後のステップに移動できます。State Dataを使って、現在ステップの状態も取れます。マルチスレッドなどでは便利そうです。

Call StackScope Stackでは任意の呼び出し元に移動できます。Scope StackはVisual Studioにない機能のはずなので、(やめたほうがいいけど)多段呼び出しになっているような場合はうれしいですね。

Session Recording

Session Recording

以前やったデバッグ、あれどうだったっけ?と思うことはないでしょうか?Session Recordingを使えば、デバッグの記録ができます。IntelliTraceでも同じような感じですね。まだ深く使ってないので、どちらが、とはいえないですが、これもやはり高速なディスク上に保存するといいと思います。これは単独で使うものではなく、どちらかといえば、次の共有機能とセットでしょう。

記録ファイルは%userprofile%の下、具体的には以下の場所に入っています。

%userprofile%\documents\RevDeBug\SolutionName\Recordings

Share your recordings and save them for later use by others

Share your recordings and save them for later use by others

最近Visual Studio Codeでは複数の端末間で同じコードのデバッグができるようになりましたが、時差があるような場所にいる人にデバッグを頼むとか、オフラインの場所ではそれも難しいですね。そんなとき、このSession Recordingで記録した情報を送れば環境によらず同じデバッグができます。特にマルチスレッド関係のデバッグは端末によっておきたり起きなかったりが発生するため、大変有用だと思います。

リモート環境でのデバッグ情報も保存して共有できるので、特にクラウド環境とかのデバッグ情報を共有するのは便利そうです。

そのほか

Kubernetisのコンテナーデバッグ、AzureやAWSでの.NET Coreアプリデバッグ、AWS Lambdaのデバッグなどもサポートしているようです。Lambdaで.NET Core使っている人はどうでしょう?

チュートリアル用のプロジェクトも公開されています。

Visual Studio 2017オフラインイメージから古いコンポーネントを削除するツールを公開しました

Visual Studio 2017はオフラインインストール用のイメージ作成ができます。

docs.microsoft.com

Visual Studio 2017もラピッドリリースになったようで、従来のService Packレベルの更新が数か月に一度程度公開されます。この辺は.NET Coreや昨今の流れのはやいオープンソース系のツールについていくには仕方のないことですね。

docs.microsoft.com

ところが困った点として、同じフォルダでオフラインイメージを構築していくと、古いバージョンのコンポーネントもたまっていきます。私の場合は最新版だけあればいいので、こんなツールを作ってみました。

github.com

Visual Studio 2017のオフラインイメージをダウンロードしたフォルダを指定して実行すると、最新のコンポーネントのフォルダを除いて削除します。

.NET Coreの練習用に作ってみました。Releaseは作っていないのですが、Visual Studio用のツールなので、Visual Studioは持っている(もしくは.NET Core SDKだけでビルドできる)ので、まぁいいでしょう。

誰得ツールですが、よかったら使ってみてください。

(追記) --cleanオプションでできたのか…前なかった気がするんだけどなぁ…と思ったら、15.3のインストーラーで追加されたのか。

dotnetConf関西2017を開催しました

connpass.com Photo by No.1

f:id:kkamegawa:20171015172950j:plain

あいにくの天候でしたが、参加してくださった方、スピーカーを引き受けてくれた方、スタッフの皆さん、会場を提供していただいた日本マイクロソフト様、ありがとうございました。今回は早々に参加者が定員上限に達して、あまり宣伝しなくてもいいかなという感じでほんと助かりました。

あいにく、ご都合が悪く、参加できなかった方もちゃんとキャンセル処理していただけたのも助かります。

前回よりも早々に枠が埋まったので、.NET(Core)をもう一度評価してみようとか、最近英語情報ばかりで日本語情報が必要なのか、その辺りはわかりませんが、アンケート結果によってはGlobal Azure Bootcampの前に1-2回程度何かやるかもしれません。

スピーカー陣のスライドやネタとなったツィートを #dotnetconf ハッシュタグから拾ってきました。漏れていたらすいません。

今後もイベント開催するときはよろしくお願いします。

VSTSでASP.NET CoreアプリのCI/CDを行う

はじめに

以前、VSTSとAzure App ServivesのCI/CDの話を書きました。

kkamegawa.hatenablog.jp

今はちょっとやり方が変わっているので、改めて紹介します。VSTSで書いていますが、基本はJenkinsやTFSでも変わりありません。

Build定義作成

VSTSのビルドテンプレートからVisual StudioもしくはASP.NET(Preview)を選んでください。

f:id:kkamegawa:20170505133249p:plain

dotnet restoreコマンドでもいいのですが、せっかくテンプレートに入っているNugetタスクを使います。重要なポイントとして、必ず、3.5以上を選択してください。ここでは4.0にしています。

NuGet 4.0はHosted VS2017であれば入っています。

f:id:kkamegawa:20170505133251p:plain

Visual Studioタスクで使用するVisual Studioを必ずVisual Studio 2017にします。

f:id:kkamegawa:20170505133218p:plain

Azure App Serviceへのデプロイにwebdeployを使うので、dotnet publishコマンドを使用します。引数に以下の値を指定します。

publish -c $(BuildConfiguration) -o $(Build.ArtifactStagingDirectory)

これで、ビルド構成(Release, Debugなど)でビルドした結果を -o で指定された出力先にコピーします。ArtifactStagingDirectoryでエージェントの中間生成領域です。

f:id:kkamegawa:20170505133220p:plain

WebDeployはzipファイルなので、ArtifactStagingDirectoryに出力した内容をzipファイルに圧縮します。

f:id:kkamegawa:20170505133221p:plain

生成されたzipファイルをリリース機能でデプロイするための領域にコピーします。

f:id:kkamegawa:20170505133225p:plain

Optionsの中にあるAgentsで必ずHosted VS2017を選んでください。これで準備完了です。

Release機能を使う

f:id:kkamegawa:20170505133223p:plain

リリース定義を作成し、App Serviceへのリリース用の環境を作ります。ここではJapan Westを作りました。

注意点として、Stagingスロットを作っていない場合、一度App Serviceをstopで止めてから入れ替えしないといけないようです。確かこれはASP.NET Coreのissueにも挙がっていた気がします。

止めて、デプロイしてから再度startタスクを実行します。容量にもよりますが、それなりに時間がかかるので、Staging作ってswapさせたほうがいいように思います。

成果物の受け渡しに関しては、以前の記事などを参照してください。