Как отладить мертвую блокировку?

Я использую двойные кавычки в целом, но не по любой определенной причине - Вероятно, только из привычки от Java.

я предполагаю, что Вы, также более вероятно, захотите апострофы во встроенной литеральной строке, чем необходимо хотеть двойные кавычки.

27
задан Matthew Scharley 18 July 2009 в 12:10
поделиться

4 ответа

То, что вы сделали, было правильным. Если Visual Studio также заходит в тупик, это случается время от времени. Это просто невезение, если нет других проблем.

Вам не нужно запускать приложение в отладчике, чтобы его отлаживать. Запустите приложение в обычном режиме, и если возникнет тупик, вы сможете подключить VS позже. Ctrl + Alt + P , выберите процесс, выберите тип отладчика и нажмите присоединить . Использование другого набора типов отладчика может снизить риск сбоя VS (особенно если вы не отлаживаете собственный код)

Тупик включает 2 или более потоков. Вы, вероятно, знаете первую (вероятно, ваш поток пользовательского интерфейса), поскольку заметили тупик в своем приложении. Теперь вам нужно только найти другую. Зная архитектуру, его должно быть легко найти (например, какие другие потоки используют такие же блокировки, взаимодействуют с пользовательским интерфейсом и т. д.)

Если VS не работает вообще , вы всегда можете использовать windbg . Загрузите здесь: http://www.microsoft.com/whdc/devtools/debugging/default.mspx

10
ответ дан 28 November 2019 в 05:54
поделиться

Вы можете использовать различные программы, такие как Intel (R) Parallel Inspector:
http://software.intel.com/en-us/intel-parallel-inspector/

Такие программы могут показать вам места в вашем коде с потенциальными тупиками. Однако вы должны заплатить за это или использовать его только в ознакомительный период. Не знаю, есть ли такие бесплатные инструменты.

-1
ответ дан 28 November 2019 в 05:54
поделиться

Как и везде, нет инструментов "серебряной пули", чтобы выловить все тупиковые ситуации. Все дело в последовательности, в которой разные потоки получают ресурсы, поэтому ваша задача - выяснить, где был нарушен порядок. Обычно Visual Studio или другой отладчик предоставляет трассировку стека, и вы сможете выяснить, где находится несоответствие. DevPartner Studio предоставляет анализ взаимоблокировок, но в прошлый раз, когда я проверил, было слишком много ложных срабатываний. Некоторые инструменты статического анализа также обнаруживают потенциальные тупиковые ситуации.

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

0
ответ дан 28 November 2019 в 05:54
поделиться

Я бы попробовал разные подходы в следующем порядке:

-Сначала проверьте код на предмет нарушений безопасности потоков, убедившись, что ваши критические области не вызывают другие функции который, в свою очередь, попытается заблокировать критическую область.

-Используйте любой доступный вам инструмент для визуализации активности потоков, я использую собственный Perl-скрипт, который анализирует журнал ОС, который мы сделали, и отображает все переключатели контекста и показывает, когда поток прерывается.

-Если вы не можете найти хороший инструмент, сделайте запись в журнал, чтобы увидеть последние потоки, которые были запущены до возникновения взаимоблокировки. Это даст вам представление о том, где может быть вызвана проблема, это поможет, если механизмы блокировки имеют уникальные имена, например, если у объекта есть собственный поток, создайте выделенный семафор или мьютекс только для управления этим потоком.

Надеюсь, это поможет. Удачи!

4
ответ дан 28 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: