Привязывает ли процесс к другому поведение? - PullRequest
2 голосов
/ 25 апреля 2009

Хотя я знаю о различиях между сборками отладки и выпуска, мне любопытно, если присоединение отладчика к процессу (сборка выпуска или отладки) изменяет поведение процесса?

Для справки, я разрабатываю для HP 11.31 Itanium, но мне все еще любопытно, в общем случае.

Ответы [ 6 ]

5 голосов
/ 25 апреля 2009

http://en.wikipedia.org/wiki/Heisenbug#Heisenbug

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

1 голос
/ 25 апреля 2009

Да, многие вещи в структурах данных Windows меняются, когда подключен отладчик. Он меняет способ выделения / освобождения памяти, добавляет дополнительный служебный код и «маркеры» в стек (когда-либо замечал значения F00D во вновь выделенной памяти), фактически многие изменения используются анти-отладчиками для определения, является ли приложение быть отлаженным.

В интерпретируемых языках (Java, .NET) среда выполнения часто генерирует различные машинные инструкции при запуске под отладчиком, чтобы помочь ему перехватывать и отображать исключения, показывать исходный код и т. Д. Обычно он также генерирует неоптимизированный код, когда отладчик прилагается.

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

1 голос
/ 25 апреля 2009

Конечно, может, в зависимости от платформы и метода отладки. Например, при отладке в Windows фактически существует функция IsDebuggerPresent . Как уже отмечалось, эту функцию можно обойти, но тогда существуют и другие средства. В общем, это сложно.

0 голосов
/ 10 июля 2009

Конечно, в многопоточных приложениях присоединение отладчика может дать другой результат. Однако как насчет кодов, не связанных с потоками?

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

0 голосов
/ 25 апреля 2009

Еще одна вещь, которую нужно иметь в виду, заключается в том, что для многопоточных приложений подключение отладчика определенно может дать очень разные результаты. Такого рода вещи называются «гейзенбагс».

0 голосов
/ 25 апреля 2009

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

...