Re[5]: Определение текущей компилируемой функции в VC++
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.09.01 00:27
Оценка:
Здравствуйте IT, вы писали:

IT>Здравствуйте VladD2, вы писали:


ФМХ>>>1. try

ФМХ>>>2. {
ФМХ>>>3. int a = b / 0;
ФМХ>>>4. }
ФМХ>>>5. catch()
ФМХ>>>6. {
ФМХ>>>7. // Как мне узнать что исключение произошло именно в строке 3?
ФМХ>>>7. }

VD>>Так поставь в catch TRACE. В его начале выводи имя файла (__LINE__), а за ним дописывай "(__LINE__)". Тогда можно будет (в VC) переходить к этому месту как к ошибке.


IT>В этом случаее __LINE__ выдаст строку 7, а по условию нужна именно 3. Насколько мне известно, никакого известного науке способа узнать о месте исключения после исключения нет. По крайней мере в отладчике об этом узнать невозможно, так как стек откатывается в обратную сторону.


Не! Ну, если нельзя но очень хочется... :)
#ifdef _DEBUG
char g_szSuxxxx[0x100];
#define BUG10k lstrcpy(g_szSuxxxx, __LINE__)
#else //_DEBUG
#define BUG10k
#endif //_DEBUG
//...
1. try
2. {
3. BUG10k; int a = b / 0;
3. BUG10k; int с = b / 0;
3. BUG10k; int в = b / 0;
4. }
5. catch()
6. {
7. // Как мне узнать что исключение произошло именно в строке 3?
8. TRACE(__LINE__); TRACE(g_szSuxxxx); TRACE("\n");
9. }

Прошу строго не судить. :)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.