Thursday, December 16, 2010

Отладка SecureString

Иногда не зная каких-то особенностей используемого продукта, можно потратить множество времени на задачу, которую можно сделать очень просто и элегантно.
Примером одной из подобных задач является просмотр значения переменной типа SecureString во время отладки.

Пример кода взят из книги "Отладка приложений для Microsoft.NET" Джона Роббинса. Habib Haydarien - руководитель проекта по разработке отладчика Visual Studio, приводит отличный способ это сделать с помощью прокси.
[assembly: DebuggerTypeProxy ( typeof ( Example.SecureStringDebuggerProxy ), Target = typeof ( SecureString ) )]
namespace Example
{
  public class SecureStringDebuggerProxy
  {
    private string m_value;
    public SecureStringDebuggerProxy(System.Security.SecureString s)
       {
         IntPtr ptr = Marshal.SecureStringToBSTR ( s );
         this.m_value = Marshal.PtrToStringBSTR ( ptr );
         Marshal.FreeBSTR ( ptr );
       }
    public string Value
    {
      get
      {
         return m_value;
      }
    }
  }
}

Результат его использования такой, какого и хотелось бы ожидать:

Правда для того чтобы эта схема работала, необходимо добавить этот код в файл AutoExp.cs, находящийся в папке "C:\Documents and Settings\ user_name\My Documents\Visual Studio 2005\Visualizers" и снова его откомпилировать в файл AutoExp.dll, который следует положить в ту же папку

No comments:

Post a Comment