以下のソースコード中にあるXMLを“%USERPROFILE%\My Documents\Visual Studio 2017\Visualizers\.natstepfilterに保存する。ドットで始まるファイル名なのでエクスプローラだとリネームできないかもしれないがコマンドプロンプト等でやる。デバッグ開始時に読み込むようなのでVisual Studioを再起動する必要はない。Visual Studio 2017で確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include "stdafx.h" #include <string> #include <iostream> using std::string; using std::cout; using std::endl; // Create "%USERPROFILE%\My Documents\Visual Studio 2017\Visualizers\.natstepfilter" with xml content below. /*********** <?xml version="1.0" encoding="utf-8"?> <StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010"> <Function><Name>operator new</Name><Action>NoStepInto</Action></Function> <Function><Name>operator delete</Name><Action>NoStepInto</Action></Function> <!-- Skip everything in std --> <Function><Name>std::.*</Name><Action>NoStepInto</Action></Function> <!-- all methods on WebKit OwnPtr and variants, ... WTF::*Ptr<*>::* --> <!-- <Function><Name>WTF::.*Ptr<.*>::.*</Name><Action>NoStepInto</Action></Function> --> </StepFilter> ************/ int main() { // if the step filter is enabled, stepping into string ctor will be disabled. string s; s = "aaa"; s.append("bbb"); cout << s << endl; return 0; } |
詳細
レファレンスはこちら。
デフォルトのステップフィルタは %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers にある。上記のステップフィルターだとstd::make_uniqueでクラスをnewするときにコンストラクタをスルーしてしまうので以下のように書き換えるとステップ・インする。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010"> <Function><Name>operator new</Name><Action>NoStepInto</Action></Function> <Function><Name>operator delete</Name><Action>NoStepInto</Action></Function> <!-- Skip everything in std --> <Function><Name>std::(?!make_unique).*</Name><Action>NoStepInto</Action></Function> <!-- all methods on WebKit OwnPtr and variants, ... WTF::*Ptr<*>::* --> <!-- <Function><Name>WTF::.*Ptr<.*>::.*</Name><Action>NoStepInto</Action></Function> --> </StepFilter> |
ソースコード
https://github.com/ambiesoft/blogprogs/tree/master/4568/stepInMakeUnique