Собственно этот пост возник из-за проблемы с dotTrace. При профиляции приложения пользователя программа намертво зависала. Отладка показала, что зависание происходило точно в момент загрузки Microsoft.DirectX.Direct3D.dll внутри профайлерного эвента ModuleLoadFinished(). Другими словами виноват однозначно dotTrace.
30 September, 2011
07 May, 2011
Коммандная строка и что вы о ней знаете
Каждый разработчик сталкивался с коммандной строкой тем или иным образом. Многие даже писали батнички. Другими словами вам кажется, что вы все знаете о командной строке все. Так? Тогда скажите что будет в массиве argv для вот такой коммандной строки: 1.exe "D:\" C:\\"Program Files\"MyApp
Чтобы получить правильный ответ нужно читать тут.
08 April, 2011
Маленький трюк в XAML
xmlns:RRR="clr-namespace:NNN;assembly=AAA"вам тут уже не годиться - имя сборки ведь нужно указать точно. Как быть спросите вы? А выход есть. В assembly AAA на которую вы хотите ссылаться нужно указать следующий атрибут
[assembly: XmlnsDefinition("http://UUU", "NNN")]а в XAML использовать следуюший синтаксис xmlns:RRR="http://UUU"и проблема решена.
04 January, 2011
Проблемы с личными сертификатами под Windows 7 и IE8
Суть проблемы в том, что ваши сертификаты видны через менэджер сертификатов, а вот IE8 чихал на это и всегда показывает пустой список. Соответственно ничего не работает. Оказывается это известная проблема и для нее есть хотфикс, но он особо не офишируется и не доступен через центр обновления. Имя ему - KB977222.
P.S. Проблема актуальна и для Windows Server 2008.
P.P.S. Напоролся на это при настройке КриптоПро CSP.
01 January, 2011
О культуре работы с реестром (Продолжение)
И снова проблемы у наших пользователей (слава богу хоть не массовые), и снова проклятые переменные окружения, которые не чистятся конкурентами. На этот раз все упирается только в IIS 7.x. Оказывается доблестные конкуренты модифицируют переменные окружения для аккаунтов под которыми запускаются пулы приложений. Пара часиков и все готово - версия dotTrace Performance 4.0.2 будет содержать фикс.
08 December, 2010
Восстановление списка активных тредов во время attach
Список ThreadID для работающих managed тредов нельзя получить через CLR v4 profiling API в чистом виде. Для sampling профайлера это очень серьезная неприятность, так как профайлер не сможет узнать о уже существующих тредах. Он их попросту не увидит.
Но есть не плохой выход - установить флажок COR_PRF_MONITOR_JIT_COMPILATION. Таким образом профайлер сможет получать events о JIT компиляции. Компиляция же происходит достаточно часто и профайлер легко сможет получить ThreadID при помощи вызова GetCurrentThreadID.
P.S. В следующей версии dotTrace, ну той что после 4.0.1, наконец-то будет attach.
26 November, 2010
Определение разрядности работающего процесса
[DllImport("kernel32.dll", PreserveSig = true, SetLastError = true, ExactSpelling = true)]
private static extern unsafe bool _IsWow64Process(void* hProcess, out bool wow64Process);
private static bool IsWow64Process(Process process)
{
if (process == null)
throw new ArgumentNullException("process");
if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || Environment.OSVersion.Version.Major >= 6)
unsafe
{
bool retVal;
if (_IsWow64Process(process.Handle.ToPointer(), out retVal))
return retVal;
}
return false;
}
public static string GetPointerSize(int processId)
{
using (Process p = Process.GetProcessById(processId))
if (IsWow64Process(p))
return 4;
switch (IntPtr.Size)
{
case 4:
return IsWow64Process(Process.GetCurrentProcess()) ? 8 : 4;
case 8:
return 8;
default:
throw new ApplicationException("Unknown pointer size");
}
}
Attach особенности реализации
Неприятной особенностью интерфейса ICLRMetaHost является то, что поодерживаются только процессы с той же разрядностью, что и у вашего приложения. Другими словами если ваше приложение 64 бита, то и работать вы сможете только с 64-х битными процессами, а если 32 бита, то - только с 32-я битными.