Встраивание имен потоков в файлы мини-дампов Windows

Наше 32-битное приложение C ++ называет свои потоки, используя стандартный подход на Windows. Мы генерируем мини-дампы при возникновении ошибок, но когда дампы загружаются в Visual Studio 2013, имена потоков отсутствуют. Это усложняет отладку проблемы, учитывая большое количество присутствующих потоков.

Единственный способ улучшить ситуацию, о которой я слышал, — это Публикация голоса пользователя Microsoft, где вызывающая сторона предлагает встроить их в пользовательский поток и написать собственное расширение Visual Studio для переименования потоков при загрузке дампа. Однако это кажется громоздким и, очевидно, добавляет много времени к процессу загрузки.

Есть ли более простой способ встраивать имена потоков в дамп, чтобы они «просто работали» при загрузке их в Visual Studio?

Для справки: мы используем Visual Studio 2013 для сборки, наши приложения работают на Win7 или выше, и мы используем Google Breakpad для создания дампов.

1

Решение

Microsoft указала, что API SetThreadDescription будет основой для любой надлежащей поддержки, которую они добавят в будущем для имен потоков в дампах, отладчиках и / или инструментах анализа.

К сожалению, похоже, что этот API довольно новый и еще не поддерживается в дампах, WinDbg, Visual Studio Debugger и т. Д. Пользовательский голосовой запрос, чтобы добавить эту поддержку, поэтому, пожалуйста, проголосуйте за него, если вы хотите правильно присвоить потокам постоянное имя.

1

Другие решения

После еще нескольких копаний кажется, что один из способов сделать это — сохранить указатель на имя в поле ArbitraryUserPointer TEB потока.

Если затем TEB был встроен в мини-дамп (что может быть достигнуто с помощью флага MiniDumpWithProcessThreadData, в соответствии с Эта статья) тогда кажется, что по крайней мере мы могли бы просмотреть текущее имя потока в окне просмотра Visual Studio, оценивая

(*(char **)(@TIB+0x14))

Возможно, надстройка отладчика Visual Studio может быть написана для проверки содержимого TEB при подключении к процессу и использования исключения «hack» для установки имени потока в окне «Потоки».

0

По вопросам рекламы [email protected]