К примеру меня зацепило наличие у .NET'овского эксепшена наличие свойства StackTrace.
Маленький пример на C#
Эх если бы объединить все вкусности всех языков программирования и всех платформ...
К примеру меня зацепило наличие у .NET'овского эксепшена наличие свойства StackTrace.
Маленький пример на C#
using System; using System.Collections.Generic; using System.Text; namespace TestExceptions { class Program { static void Main(string[] args) { try { throw new Exception(); } catch (Exception e) { Console.WriteLine("Exception Addr: " + e.StackTrace); } Console.ReadKey(); } } }И в качестве адресса я получу сборку, класс, метод и строку, в котором было исключение. Круто?
Win32 увы врядли так сможет:(
Мальнький примерчик на языке Delphi (я позаимствовал из книги Марку Канту и немного переделал):
program TestExceptions; {$APPTYPE CONSOLE} uses SysUtils; type ECustomException = class (Exception) protected procedure RaisingException(P: PExceptionRecord); override; end; procedure ECustomException.RaisingException(P: PExceptionRecord); begin Writeln('Exception Addr: ' + IntToHex ( Integer(P.ExceptionAddress), 8)); // standard processing inherited; end; begin raise ECustomException.Create('A message'); Readln; end.И в качестве результата получим адресс 0040B186h, что мягко говоря не удобно, так как прийдется запускать дебагер и медитировать на ассемблер.
P.S. Было бы неплохо приделать к блогу подсветку и нормальное форматирование синтаксиса, а то как-то не красиво выходит
5 комментариев:
ну так .net предоставляет мета информацию, а в винде этого не заложено - получите адрес и по другому никак.
В принципе можно и под виндой поизвращаться и получать что-то большее чем адрес.
да можно, но в .NET это уже реализовано:)
самый простой способ сделать подобное в винде, как мне кажеться, это использовать проверку Assert, но возрастает сложность кода и все на перед все равно не продумаешь:(
И в качестве адресса я получу сборку, класс, метод и строку, в котором было исключение. Круто?
Win32 увы врядли так сможет:(
Может вообще-то :)))))
Вообще-то, для нативной Delphi давно уже есть отличные средства для отлова всевозможных ошибок и автоматическо йгенерации полного отчета (включая стек вызовов) - MadExcept и EurekaLog (платные) и JediDebug (бесплатное).
Artem, спасибо - не знал. Нужно будет попробовать.
Отправить комментарий