| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		wolfio Участник - экстремал
 
  Вступление в Клуб: 22.10.2012
  | 
		
			
				 Пт Май 22, 2015 10:01   отладка | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Здравствуйте, ув.знатоки.
 
 
Вопрос такой возник: реально ли написать процедурку отладки, которая будет выводить Класс, метод, номер строки (plp или plpsql кода), имя переменной (если она дебажится) и ее значение?
 
 
в дистрибутиве есть аналог, только без строки. Интересно можно ли именно строку получить? | 
			 
		  | 
	 
	
		  | 
	 
	
		vtar Эксперт
 
  Вступление в Клуб: 20.03.2009
  | 
		
			
				 Пт Май 22, 2015 11:41    | 
				     | 
			 
			
				Полезность: 2 
  | 
			 
			
				каг то таг, например
 
 
 	  | Код: | 	 		  
 
s varchar(32000);
 
 
begin
 
 
   s:= ' превед! ';
 
   
 
   
 
   begin
 
      pragma error('s='||s);
 
   exception
 
      when others then
 
         null;
 
         debug_pipe('ОШИБКА: '||SQLERRM || dbms_utility.format_error_backtrace,0);
 
   end;
 
   
 
   debug_pipe(' выполняемся дальше ',0);
 
   
 
end;
 
 | 	  
 
 
11:38:19 ОШИБКА: ORA-20300: APP-PR_CRED.VT_TEST: s= превед!ORA-06512: на  "IBS.MESSAGE", line 50
 
         ORA-06512: на  "IBS.Z$PR_CRED_VT_TEST", line 41
 
          выполняемся дальше | 
			 
		  | 
	 
	
		  | 
	 
	
		wolfio Участник - экстремал
 
  Вступление в Клуб: 22.10.2012
  | 
		
			
				 Пт Май 22, 2015 13:27    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| не понял.. это прагма передает управление в исключение чтоли? разве прагма не прерывает исполнение пакета? | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Пт Май 22, 2015 13:33    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | wolfio пишет: | 	 		  | не понял.. это прагма передает управление в исключение чтоли? разве прагма не прерывает исполнение пакета? | 	  
 
 
Прагма ERROR вставляет в код операции вызов функции MESSAGE.APP_ERROR для вывода сообщения об ошибке с дополнительным указанием её короткого имени и ТБП в качестве кода 
 
ошибки. | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Пт Май 22, 2015 13:38    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | wolfio пишет: | 	 		  | не понял.. это прагма передает управление в исключение чтоли? разве прагма не прерывает исполнение пакета? | 	  
 
 
Судя по логу как раз так и происходит...
 
 то есть
 
1. передает управление в исключение, 
 
2. выводит сообщение, 
 
3. далее корректно продолжает исполнение кода | 
			 
		  | 
	 
	
		  | 
	 
	
		wolfio Участник - экстремал
 
  Вступление в Клуб: 22.10.2012
  | 
		
			
				 Пт Май 22, 2015 14:24    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				да, я со второго прочтения осознал что тут написано  
 
способ интересный, но много мусора, особенно, если поставить такой "дебаг" в стек нескольких операций.
 
 
может быть есть какие-нибудь другие варианты, как получить номер строки? | 
			 
		  | 
	 
	
		  | 
	 
	
		Gobur Профи
 
  Вступление в Клуб: 06.11.2012
  | 
		
			
				 Сб Май 23, 2015 10:30    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | wolfio пишет: | 	 		  да, я со второго прочтения осознал что тут написано  
 
способ интересный, но много мусора, особенно, если поставить такой "дебаг" в стек нескольких операций.
 
 
может быть есть какие-нибудь другие варианты, как получить номер строки? | 	  
 
 
У ЦФТ другой подход - на ключевых строках операции просто добавляют вывод отладочных сообщений и применяют мехнизм включения и выключения отладки. А пистаь универсально что то для любой операции большого смысла нет. В любом случае не получится такого отладчика, когда исполняемый код на стороне клиента.
 
Для оракловых пакетов думаю это нормальных способ отладится, другое дело, что универсализма нет, но и отладка только на момент внедрения операции требуется , как правило. | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |