IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Хочу получить диагностику ошибкин
сообщение
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

function a(i :longint): integer;
begin
a := 1 div i;
end;

procedure b(var i : longint);
begin
i := a(i);
end;

var i : longint;
begin { TODO -oUser -cConsole Main : Insert code here }
i := 0;
b(i);
writeln(i);
end.


1. Хочется получить на экран диагностику с указанием строки, в которой произошла ошибка. Например так, как это делает ТМТ:
Код
RunError #200 (division by zero)
Calls stack:
ERRORTMT.A [ERRORTMT.PAS(10) at 00000009]
ERRORTMT.B [ERRORTMT.PAS(15) at 0000000A]
ERRORTMT.ERRORTMT [ERRORTMT.PAS(21) at 0000000A]

Return code: 4
Execution time: 0.06 seconds
Press any key...


2.Хочется самому получить доступ к отладочной информации. Например, получить в подпрограмме название вызывающей программы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 52
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Обработка исключений try except
Или вы всеже хотите производить декомпиляцию???


--------------------
With best regards, Better Kind
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Еще раз: хочу
1. При завершении по ошибке получить посмертный дамп.
2. В вызываемой подпрограмме получать строку с именем вызывающей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(andriano @ 18.12.2007 11:55) *

Еще раз: хочу
1. При завершении по ошибке получить посмертный дамп.
2. В вызываемой подпрограмме получать строку с именем вызывающей.

Копай в сторону api SetUnhandledExceptionFilter для установки своего обработчика исключений, в нем MiniDumpWriteDump для дампа процесса. По дампу обнаружишь в какой функции крякнуло, по стеку - откуда пришло.. Дизассемблер можно прикрутить любой, благо их полно. Чтобы получить название функций придется самому подготовить такую табличку при старте программы - адрес/название, и потом ее использовать при анализе дампа.

Добавлено через 2 мин.
ps только это не отладочная информация, а как бы анализ собственными силами.


Сообщение отредактировано: Malice -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Дело в том, что подавляющее число компиляторов сами составляют такие таблицы и на их основе осуществляют вывод посмертного дампа. Над изготовлением такой таблицы ручками я, разумеется, думал, но эта идея мне не понравлась.
В ТМТ, собственно, я при необходимости получить название вызывающей подпрограммы добываю ее из этой формируемой компилятором таблицы. Хотелось бы иметь возможность делать то же самое из Дельфи.
Подключать дизассемблер - и мысли такой не было. Не нужно это.
Ладно, "копать" в сторону SetUnhandledExceptionFilter я попробую, но, честно говоря, не верится, что такая функция как посмертный дамп может отсутствовать в мало-мальски серьезном крмпиляторе. Неужели в Дельфях это так?
Другое дело, что в любом компиляторе эта функция подключается только при компиляции в отладочном режиме и отключена в основном. Может и Дельфи здесь все-таки следуют стандарту de facto, и эту функцию можно как-то включить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.09.2020 19:42
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name