Стек вызовов во времени выполнения

Вы можете вручную создать массив и вернуть его.

Вот функция, которая может легко масштабироваться, если вы хотите получить больше (или меньше) трех элементов.

Примечание. что если срез слишком мал, конечные члены массива будут равны 0.

fn pop(barry: &[u8]) -> [u8; 3] {
    let mut array = [0u8; 3];
    for (&x, p) in barry.iter().zip(array.iter_mut()) {
        *p = x;
    }
    array
}
5
задан Aardvark 24 October 2008 в 16:14
поделиться

6 ответов

Я полагаю, что эта страница имеет ответ, который Вы ищете. Вы сказали, что Визуальные C, таким образом, я принимаю Вас, означают окна.

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

Взгляните на StackWalk64.

Если Вы привыкли делать это на.NET, то Вы находитесь в для противного удивления.

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

Если Вы хотите получить стек вызовов катастрофического отказа, что Вы действительно хотите сделать, после смерти отлаживает. Если Вы хотите проверить стек вызовов приложения, в то время как оно работает, это - одна из многих функций, которые может предложить Проводник Процесса SysInternals.

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

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

Но быть на безопасной стороне (Ваш фильтр необработанного исключения мог бы быть непреднамеренно перезаписан), Вы могли вставить свой код __ попытка / __ кроме блока и записать мини-дамп из функции фильтра (примечание, у Вас не может быть объектов, которые требуют автоматического раскручивания в функции с __ попытка / __ кроме блока, если у Вас действительно есть они, рассмотрите помещение их в отдельную функцию):

долго __ stdcall myfilter (EXCEPTION_POINTERS *pexcept_info)
{
    mycreateminidump (pexcept_info);
    возвратите EXCEPTION_EXECUTE_HANDLER;
}
освободите myfunc ()
{
__ попробуйте {
    //Ваша логика здесь
} __ кроме (myfilter (GetExceptionInformation ())) {
    //исключение обработано
}
}

Можно затем осмотреть файл дампа с отладчиком по Вашему выбору. И Visual Studio и отладчики от пакета Windows Debugging Tools могут обработать мини-дампы.

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

Если Вы активно не отлаживаете, можно "разрушить" приложение для создания мини-дампа (это может быть сделано неагрессивно и позволяет приложению продолжить работать). IIRC DrWatson позволит Вам сделать это, если не userdump от поддержки MS будет.

Можно затем загрузить дамп в windbg и видеть стек вызовов + переменные и т.д. там. Вам будут нужны символы Вашего приложения для понимания трассировки.

Если Вы ищете более простой стиль кода во время выполнения трассировки, я рекомендую простой класс, которого Вы инстанцируете на каждом методе, конструктор пишет использованию имени метода OutputDebugString. Используйте WinDebug для просмотра трассировки как прогоны программы. (поместите некоторую форму управления в Вашем классе, даже если его просто глобальная переменная или значение реестра или глобальный Atom, таким образом, можно включить или выключить трассировку по желанию).

0
ответ дан 14 December 2019 в 13:51
поделиться

Это отказывает в редких случаях. Я искал способ получить имя вызывающей стороны и зарегистрировать его.

Что Вы подразумеваете под ним катастрофические отказы? Нарушение прав доступа? Разделиться на нуль? что точно? Это взаимодействует с компонентами привилегированного режима?

Включите appverifier., который должен устранить много вещей.

создайте это:

Выполнение файла HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image Options\FileName.exe

под тем ключом создайте новое имя строки: значение отладчика: c:\pathtowindbg\windbg.exe - строительное стекло - ксенон av

При выполнении кода на 32 бита с, НИЧЕГО СЕБЕ, необходимо сделать это под wow3264node.

0
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

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