Я хотел бы заменить любое стандартное диалоговое окно с ошибкой на throw
или debug-break
(со стандартным я имею в виду все, что не написано мной явно), поскольку, как и в описанном разделе причин,это иногда приводило бы к невозможности отладки Windows-службы.
для этого я попытался определить что-то вроде:
-D "_HAS_ITERATOR_DEBUGGING=0"
, но выше просто отключил диалоги ошибок ина самом деле этого недостаточно, чтобы отследить проблемы, поэтому я бы хотел, чтобы он показывал throw-exception
или debug-break
вместо отображения диалогового окна с ошибкой.
Есть ли что-то еще, что вы бы мне предложили определить или сделать?
Причина:
При разработке службы Windows у меня были трудные времена, чтобы найти ошибку, которая приводила к сбою сервера:
Воспроизвести:
запустив ниже службу (скомпилированную в режиме отладки) вы можете воспроизвести эту проблему:
#include <unordered_map>
// will cause crash by trying to increment iterator pointing to end
inline static void simulateCrash() {
typedef std::unordered_map<quint32, quint32> Hash;
Hash list;
list[0xC001] = 0xDEAD;
Hash::iterator it = list.begin();
it = list.erase(it);
++it; // should crash here
}