Ожидание с катастрофическим отказом для отладчика?

Некоторые опции можно хотеть посмотреть на:

STLSoft Matthew Wilson (автор Несовершенного C++) имеет auto_buffer шаблонный класс, который помещает массив по умолчанию на стек, но если это растет, чем выделение стека захватит память от "кучи". Мне нравится этот класс - если Вы знаете, что Ваши контейнерные размеры обычно будут ограниченными довольно низким пределом, тогда Вы получаете скорость локального, складываете выделенный массив. Однако для угловых случаев, где Вам нужно больше памяти, все это все еще работает правильно.

http://www.stlsoft.org/doc-1.9/classstlsoft_1_1auto__buffer.html

Примечанием, которое реализацию я использую сам, не является STLSoft's, но реализация, которая влезает в долги от него.

"Ленивый Программист" сделал сообщение для реализации контейнера, который использует alloca() для устройства хранения данных. Я не поклонник этой техники, но я позволю Вам решить для себя, если это будет тем, что Вы хотите:

http://tlzprgmr.wordpress.com/2008/04/02/c-how-to-create-variable-length-arrays-on-the-stack/

Тогда существует boost::array, который не имеет ни одного из динамического поведения калибровки первых двух, но дает Вам больше эти vector интерфейс, чем просто использование указателей как итераторы, которые Вы получаете со встроенными массивами (т.е., Вы добираетесь begin(), end(), size(), и т.д.):

http://www.boost.org/doc/libs/1_37_0/doc/html/boost/array.html

5
задан Jonathan Leffler 23 September 2009 в 12:25
поделиться

4 ответа

В Linux (и, возможно, OSX и других unixen) вы можете разрешить программам оставлять дамп ядра с помощью утилиты ulimit .

Вот быстрое руководство .

3
ответ дан 14 December 2019 в 08:55
поделиться

В Windows есть DebugBreak () IsDebuggerPresent ( ) ), что является одним из вариантов того, что может произойти, когда assert терпит неудачу.

В MacOS есть аналогичные вызовы API ( Debugger () или SysBreak () ).

Я мало что знаю о Linux, но AFAIK неудачное утверждение в Linux вызовет coredump, который можно просмотреть в отладчике.

2
ответ дан 14 December 2019 в 08:55
поделиться

В Linux, в основном, когда происходит что-то ужасное, ваша программа получает сигнал . Если вы не «замаскируете» этот сигнал, то у программы есть поведение по умолчанию. обычно вы можете «замаскировать» его, чтобы сделать что-то еще, например, открыть gdb. Вы можете найти, как маскировать, и многое другое в здесь , в частности здесь .

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

1
ответ дан 14 December 2019 в 08:55
поделиться

К сожалению, мой ответ распространяется только на Windows, но имеет смысл, что у Linux также будет какой-то способ сигнализировать отладчик.

На любой машине с установленной Visual Studio должна быть включена отладка Just in Time . По сути, это означает, что отладчик не должен запускаться, когда процесс обнаруживает фатальную исключительную ситуацию.

Оперативная отладка включается с помощью раздела реестра. Для получения дополнительных сведений перейдите по ссылке выше.

Если вы хотите зафиксировать моментальный снимок процесса для последующего просмотра, то это обычно выполняется с помощью Adplus.vbs (при участии) или DebugDiag (без присмотра). Adplus доступен через Debugging Toolkit для Windows , но DebugDiag загружается отдельно.

1
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

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