Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» С++ Builder, как вывести номер строки с ошибкой?

Автор: XDiaBLo
Дата сообщения: 12.09.2006 09:43
Ну нашёл я в хелпе такое:

Код: #include <vcl.h>

#pragma hdrstop
#include <except.h>

USERES("Project1.res");
//---------------------------------------------------------------------------

#pragma option -xp

void MyFunc(void)
{
throw Exception( "The rain in spain lies mainly in the plain." );
}

//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
try { MyFunc(); }

catch ( Exception &e )
{ ShowMessage( e.Message + "\n\n"
+ "An exception of type " + __ThrowExceptionName()
+ "\nwas thrown by line " + AnsiString(__ThrowLineNumber())

+ "\nof file " + __ThrowFileName() );
};
return 0;
}
Автор: KADABRA
Дата сообщения: 12.09.2006 20:07
XDiaBLo
Возможно это отладочная информация, и в релиз версии библиотеки её нету?
Автор: XDiaBLo
Дата сообщения: 13.09.2006 15:03
KADABRA
Да мне параллельно на библиотеки, мне нужно лишь знать в какой строке моей программы библиотечная функция выбросила эксцепшен, неужели невозможно?
Автор: KADABRA
Дата сообщения: 13.09.2006 15:23
XDiaBLo
Я с билдером плохо знаком, но уверен что нет (стандарными средствами).
Автор: XDiaBLo
Дата сообщения: 14.09.2006 06:45
Ну не ловить же мне в каждой строке возможные эксцепшены, чтоб потом сразу же перебросить с нужной информацией?
Автор: Qraizer
Дата сообщения: 14.09.2006 12:04
Когда-то Борланд вот так умел:
Цитата:
Enable Exception Location Information

(Command-line equivalent: -xp)
When Enable Exception Location Information is on, run-time identification of exceptions is available, providing the file name and line number in the source code where the exception occurred. This enables the program to query file and line number from where a C++ exception was thrown.
Default = OFF
Как с этим дела обстоят сейчас - не знаю.
Автор: XDiaBLo
Дата сообщения: 14.09.2006 12:44
Qraizer
Да включил я уже это -xp, толку мало, когда моя программа бросает эксцепшн, номер строки показывает, но если эксцепшен бросается где-то внутри библиотечных функций, я не вижу номера строки... И мне не надо знать где в библиотечных файлах он был брошен, а мне надо где та строка в моей программе, в которой возникла проблема!
Автор: Qraizer
Дата сообщения: 14.09.2006 21:35
Чтобы это работало для библиотечных функций, нужно, чтобы они сами в своё время были откомпилированы с этой опцией. К тому же это всё равно не то, что тебе надо... Могу только посоветовать получить адрес исключения и размотать стек до своего кода. DbgHelp тебе в помощь
Автор: Xarde
Дата сообщения: 15.09.2006 06:43

Цитата:
но если эксцепшен бросается где-то внутри библиотечных функций

Видимо, ты не совсем ясно понимаешь работу исключений. Дело в том, что исключение бросается обычно один раз. И ловится обычно тоже один раз. В редких случаях после отлова оно перебрасывается дальше. Дык вот, в твоём случае эксепшн бросила либа. Ты его нигде не ловил и не перебрасывал - потому и не сможешь узнать номер "проблемной" строки.
Автор: XDiaBLo
Дата сообщения: 15.09.2006 07:10
Xarde
Я то всё это понимаю, я просто подумал, может есть что-то ещё, про что я не слышал, что могло бы мне помочь :)
Видел вот иногда в играх показывает где ошибка, когда игра вылетает, с названием файла исходника, и номером строки. Наверное пираты скомпилили с отладочной информацией... В общем было бы удобно...
Автор: Xarde
Дата сообщения: 15.09.2006 08:56
Ну, делай просто тупую обёртку вызовов библиотечных функций в блоки try, лови исключения и бросай дальше. Тупо, но сработает. Максимум, что, возможно, придётся сделать - бросать новый эксепшн ан основе старого, а не сам старый, но проверить это недолго

Добавлено:
Кстати. вот ещё идея - сделай свою обёртку на их библиотеку, которая как раз и будет перебрасывать эксепшены. Далее, думаю, объяснять не нужно.
Автор: XDiaBLo
Дата сообщения: 15.09.2006 11:23
Xarde
Хмм... Что-то больно дофига обёрток делать придётся, я не кондитерская фабрика, чтоб всё старательно заворачивать :))) Тогда уж чёрт с ним, я ошибку итак легко найду через отладчик, просто хотелось чтоб юзеры по телефону сразу говорили в какой там у меня строке ошибка сработала, а то приходится имитировать ситуацию у себя на компьютере с их данными. И бывает что не по одному разу в день. Чаще всего правда ошибка не в программе, а просто неправильный формат файла программе на вход подсовывают. Надо бы на предмет этого проверок натыкать, и звонить меньше станут...
Автор: Xarde
Дата сообщения: 15.09.2006 12:02

Цитата:
Надо бы на предмет этого проверок натыкать

Имхо, это стоит делать почти всегда и сразу. Не стоит рассчитывать, что твоей программе будут подсовывать только файлы в нужном формате. А ну как кто-нибудь вместо текста экзешник подсунет?
Автор: XDiaBLo
Дата сообщения: 18.09.2006 07:40
Xarde
Нуу, программу изначально не я писал, я доработкой и поддержкой занимаюсь, я уже много багов отловил, и проверок наставил.

Страницы: 1

Предыдущая тема: Разработчик встроенного ПО(от 2000), Москва


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.