OS/2 FAQ


OS/2 Programming FAQ - пpогpаммиpование. Статья 057

Q Запись детальной информации об Exception'е
A
(George Shapovalov, 2:5020/341.26)

except3.zip

"EXCEPTQ in a 32 bit DLL which implements an exception handler which saves the registers in a file named xxxx.TRP (xxxx=Pid,Tid) together with the Loaded modules code and data objects addresses, and also the failing thread stack dump and the process status as given by DosQProcStatus. Trapperq is an IBM C/2 program which shows how to implement the call to 32 bits exception handler from a 16:16 bits program. enter Trapperq to generate a trap and the xxxx.TRP file. You are free to use that code as a sample for your programs. No support or guarantee from me implied.

Cheers Marc Fiammante

С трешкой работает, а с четверкой еще не собирал. Поищи на хоббесах или в домейне в примерах. Если не найдешь, я тебе на емейл кину. Вот пример работы:

#pragma handler(main)
#pragma map (_Exception,"MYHANDLER")

#include <stdio.h>
#include <stdlib.h>

void TrapFunc(void);

main(){
printf("Exception handler has been set by compiler\n");
printf("Generating the TRAP from function\n");
TrapFunc();
}
void TrapFunc() {
char * Test;
Test=0;
*Test=0;
}
Вот пример трап-файла:
--------------------------
Exception C0000005 Occurred
at 00:03:17  02/09/100
Invalid linear address 00000000

OS/2 Version 2.40
Failing code module internal name : SAMPLE
Failing code module file name : E:\TEMP\SAMPLE.EXE
Failing code Object # 1 at Offset 58
File     Line#  Public Symbol
------------ -----  -------------
SAMPLE.C     44  TrapFunc (sample.obj) 0001:00000048
List of auto variables at EBP 28854 in TrapFunc:
Offset Name                 Type                              Value
------ -------------------- --------------------------------- -----------------
-4     Test                 near pointer to 8 bit unsigned    0x0 invalid


+-------------------------------------------------------------+
| GS  : 0000     FS  : 150B     ES  : 0053     DS  : 0053     |
| EDI : 00000000 ESI : 00000000 EAX : 00000000 EBX : 00000000 |
| ECX : 00000000 EDX : 00000004                               |
| EBP : 00028854 EIP : 00010058 EFLG: 00012206 ESP : 00028850 |
| CS  : 005B     SS  : 0053                                   |
+-------------------------------------------------------------+

Failing instruction at CS:EIP : 005B:00010058 is  mov      [eax],00


+------------------------------------+
| Register content analysis          |
+------------------------------------+
| EAX does not point to valid memory |
| EBX does not point to valid memory |
| ECX does not point to valid memory |
| EDX does not point to valid memory |
| EDI does not point to valid memory |
| ESI does not point to valid memory |
+------------------------------------+

Thread slot 125 , Id 1 , priority 200
Stack Bottom : 000208A0 (0017:08A0) ;Stack Top    : 000288A0 (0017:88A0)
Process Id : 201 .EXE name : E:\TEMP\SAMPLE.EXE

Call Stack:
Source    Line      Nearest
EBP      Address    Module  Obj#      File     Numbr  Public Symbol
--------  ---------  -------- ----  ------------ -----  -------------
Trap  ->  000F:0058  SAMPLE   0001     SAMPLE.C     44  TrapFunc (sample.obj)
0001:00000048

00028854  :00010035  SAMPLE   0001     SAMPLE.C     39  main (sample.obj)
0001:00000000

No auto variables found in main.

0002886C  :00010101  SAMPLE   0001     SAMPLE.C     45  __RunExitList
(edcstrt.ASM) 0001:00000060

List of auto variables at EBP 28888 in TrapFunc:
Offset Name                 Type                              Value
------ -------------------- --------------------------------- -----------------
-4     Test                 near pointer to 8 bit unsigned    0x11150 unwritable

00028888  DFDF:C098  DOSCALL1 0004
Lost Stack chain - new EBP below previous

+-------------------------------------------------------------------------+
| List of currently accessed modules (DLLs) object addresses              |
+-------------------------------------------------------------------------+
| Module E:\TEMP\SAMPLE.EXE                               Handle 00004756 |
| Object Number    Address    Length     Flags      Type                  |
|        000000    00010000   00003D94   00010015  - 16:16  Selector 000F |
+-------------------------------------------------------------------------+
[ ...съедено молью... ]
+-------------------------------------------------------------------------+
| Module D:\OS2\DLL\UCONV.DLL                             Handle 00000995 |
| Object Number    Address    Length     Flags      Type                  |
|        000000    1FCF0000   000059D9   00012015  - 16:16  Selector FE7F |
+-------------------------------------------------------------------------+

/*----- Stack Bottom ---*/

/*----- Accessible Stack Bottom at 208A0 ---*/

000208A0 :0000 0000 0000 0000 0000 0000 0000 0000   ................
000208B0 :  lines not printed same as above

00027FE0 :5300 0000 AD65 F91B 0000 0500 0000 F87F   S....e..........
[ ...съедено молью... ]
00028890 :9412 0000 0000 0000 0000 0300 8413 0300 ................
/*----- Stack Top -----*/


К предыдущей статье | К оглавлению раздела | К следующей статье

Вернуться к списку разделов FAQ.

Если у вас есть вопросы или пожелания, пишите, мы будем рады.

Данный FAQ cоставили Ivan Borovicov и Viatcheslav Odintsov (2:5020/181) на основе OS/2 FAQ Дмитрия Завалишина (dz) и материалов переписки в группе эхоконференций su.os2.*. Оформление статей: Николай Королев. Программирование JSP для RU/2: Евгений Кулешов. Благодарности: Дмитрию Максимовичу (MaximDim) за громадную помощь на первых этапах и Дмитрию Бану (banshee) за его помощь при проверке текста.



Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ