можно ли как нибудь при исключении узнать какие были значения регистров? Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)
А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>можно ли как нибудь при исключении узнать какие были значения регистров?
Если разработчик написал программу на C или C++, то чем данная информация (насчёт значений регистров CPU) может быть ему полезна?
VYR>Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)
Как-то странно говорить о стандартах, если приложение в состоянии UB.
Ну будет какая-нибудь штуковина, которая покажет регистры. Что может иметь хоть какую-то пользу, если писать на ассемблере.
Но ведь если писать на ассемблере, то жизни не хватит, чтобы написать что-либо значительное
VYR>А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?
Предположу, что далеко не всегда, перед крахом программы вызывается исключение.
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>>можно ли как нибудь при исключении узнать какие были значения регистров?
AG>Если разработчик написал программу на C или C++, то чем данная информация (насчёт значений регистров CPU) может быть ему полезна?
VYR>>Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)
AG>Как-то странно говорить о стандартах, если приложение в состоянии UB. AG>Ну будет какая-нибудь штуковина, которая покажет регистры. Что может иметь хоть какую-то пользу, если писать на ассемблере. AG>Но ведь если писать на ассемблере, то жизни не хватит, чтобы написать что-либо значительное
VYR>>А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?
AG>Предположу, что далеко не всегда, перед крахом программы вызывается исключение.
разговор неочём ...
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>можно ли как нибудь при исключении узнать какие были значения регистров? Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)
Под linux исключения реализованы через сигналы. Можно установить свой обработчик и получить значения регистров через ucontext_t.
man sigaction : ucontext
Разумеется, будет работать только для системных исключений типа seg_fault, а не для своих throw.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>можно ли как нибудь при исключении узнать какие были значения регистров? Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)
VYR>А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>А устанавливать сигнал нужно через signal или через другую функцию?(там вроде параметр int)
Устанавливать обработчик сигнала через sigaction, с флагом SA_SIGINFO. man sigaction.
Для тестирования сигнал можно посылать через утилиту kill.
Пример легко гуглится: ссылка
В этом примере REG_PC — регистр Program Counter (Sparc). Тебе нужен будет REG_RIP, например.(/usr/include/x86_64-linux-gnu/sys/ucontext.h)
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)