Changeset 264 for ExceptionLogger


Ignore:
Timestamp:
Aug 17, 2011, 10:08:55 AM (13 years ago)
Author:
george
Message:
  • Modified: Now detailed info is displayed after user click Details. User will see at first only necessary error message.
  • Modified: Now methods in TStackTrace class loads call stack and exception stack only as list of frame address. Then delayed GetInfo method should be called to fully load call stack debug information. This is useful in case of external debug file where loading time could be significant.
Location:
ExceptionLogger
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • ExceptionLogger/ExceptionLogger.lpk

    r222 r264  
    11<?xml version="1.0"?>
    22<CONFIG>
    3   <Package Version="3">
     3  <Package Version="4">
    44    <PathDelim Value="\"/>
    55    <Name Value="ExceptionLogger"/>
     6    <AddToProjectUsesSection Value="True"/>
    67    <Author Value="Chronos (robie@centrum.cz)"/>
    78    <CompilerOptions>
     
    5455    </i18n>
    5556    <Type Value="RunAndDesignTime"/>
    56     <RequiredPkgs Count="2">
     57    <RequiredPkgs Count="127">
    5758      <Item1>
    5859        <PackageName Value="LCL"/>
    5960      </Item1>
    6061      <Item2>
     62        <PackageName Value="LCL"/>
     63      </Item2>
     64      <Item3>
     65        <PackageName Value="LCL"/>
     66      </Item3>
     67      <Item4>
     68        <PackageName Value="LCL"/>
     69      </Item4>
     70      <Item5>
     71        <PackageName Value="LCL"/>
     72      </Item5>
     73      <Item6>
     74        <PackageName Value="LCL"/>
     75      </Item6>
     76      <Item7>
     77        <PackageName Value="LCL"/>
     78      </Item7>
     79      <Item8>
     80        <PackageName Value="LCL"/>
     81      </Item8>
     82      <Item9>
     83        <PackageName Value="LCL"/>
     84      </Item9>
     85      <Item10>
     86        <PackageName Value="LCL"/>
     87      </Item10>
     88      <Item11>
     89        <PackageName Value="LCL"/>
     90      </Item11>
     91      <Item12>
     92        <PackageName Value="LCL"/>
     93      </Item12>
     94      <Item13>
     95        <PackageName Value="LCL"/>
     96      </Item13>
     97      <Item14>
     98        <PackageName Value="LCL"/>
     99      </Item14>
     100      <Item15>
     101        <PackageName Value="LCL"/>
     102      </Item15>
     103      <Item16>
     104        <PackageName Value="LCL"/>
     105      </Item16>
     106      <Item17>
     107        <PackageName Value="LCL"/>
     108      </Item17>
     109      <Item18>
     110        <PackageName Value="LCL"/>
     111      </Item18>
     112      <Item19>
     113        <PackageName Value="LCL"/>
     114      </Item19>
     115      <Item20>
     116        <PackageName Value="LCL"/>
     117      </Item20>
     118      <Item21>
     119        <PackageName Value="LCL"/>
     120      </Item21>
     121      <Item22>
     122        <PackageName Value="LCL"/>
     123      </Item22>
     124      <Item23>
     125        <PackageName Value="LCL"/>
     126      </Item23>
     127      <Item24>
     128        <PackageName Value="LCL"/>
     129      </Item24>
     130      <Item25>
     131        <PackageName Value="LCL"/>
     132      </Item25>
     133      <Item26>
     134        <PackageName Value="LCL"/>
     135      </Item26>
     136      <Item27>
     137        <PackageName Value="LCL"/>
     138      </Item27>
     139      <Item28>
     140        <PackageName Value="LCL"/>
     141      </Item28>
     142      <Item29>
     143        <PackageName Value="LCL"/>
     144      </Item29>
     145      <Item30>
     146        <PackageName Value="LCL"/>
     147      </Item30>
     148      <Item31>
     149        <PackageName Value="LCL"/>
     150      </Item31>
     151      <Item32>
     152        <PackageName Value="LCL"/>
     153      </Item32>
     154      <Item33>
     155        <PackageName Value="LCL"/>
     156      </Item33>
     157      <Item34>
     158        <PackageName Value="LCL"/>
     159      </Item34>
     160      <Item35>
     161        <PackageName Value="LCL"/>
     162      </Item35>
     163      <Item36>
     164        <PackageName Value="LCL"/>
     165      </Item36>
     166      <Item37>
     167        <PackageName Value="LCL"/>
     168      </Item37>
     169      <Item38>
     170        <PackageName Value="LCL"/>
     171      </Item38>
     172      <Item39>
     173        <PackageName Value="LCL"/>
     174      </Item39>
     175      <Item40>
     176        <PackageName Value="LCL"/>
     177      </Item40>
     178      <Item41>
     179        <PackageName Value="LCL"/>
     180      </Item41>
     181      <Item42>
     182        <PackageName Value="LCL"/>
     183      </Item42>
     184      <Item43>
     185        <PackageName Value="LCL"/>
     186      </Item43>
     187      <Item44>
     188        <PackageName Value="LCL"/>
     189      </Item44>
     190      <Item45>
     191        <PackageName Value="LCL"/>
     192      </Item45>
     193      <Item46>
     194        <PackageName Value="LCL"/>
     195      </Item46>
     196      <Item47>
     197        <PackageName Value="LCL"/>
     198      </Item47>
     199      <Item48>
     200        <PackageName Value="LCL"/>
     201      </Item48>
     202      <Item49>
     203        <PackageName Value="LCL"/>
     204      </Item49>
     205      <Item50>
     206        <PackageName Value="LCL"/>
     207      </Item50>
     208      <Item51>
     209        <PackageName Value="LCL"/>
     210      </Item51>
     211      <Item52>
     212        <PackageName Value="LCL"/>
     213      </Item52>
     214      <Item53>
     215        <PackageName Value="LCL"/>
     216      </Item53>
     217      <Item54>
     218        <PackageName Value="LCL"/>
     219      </Item54>
     220      <Item55>
     221        <PackageName Value="LCL"/>
     222      </Item55>
     223      <Item56>
     224        <PackageName Value="LCL"/>
     225      </Item56>
     226      <Item57>
     227        <PackageName Value="LCL"/>
     228      </Item57>
     229      <Item58>
     230        <PackageName Value="LCL"/>
     231      </Item58>
     232      <Item59>
     233        <PackageName Value="LCL"/>
     234      </Item59>
     235      <Item60>
     236        <PackageName Value="LCL"/>
     237      </Item60>
     238      <Item61>
     239        <PackageName Value="LCL"/>
     240      </Item61>
     241      <Item62>
     242        <PackageName Value="LCL"/>
     243      </Item62>
     244      <Item63>
     245        <PackageName Value="LCL"/>
     246      </Item63>
     247      <Item64>
     248        <PackageName Value="LCL"/>
     249      </Item64>
     250      <Item65>
     251        <PackageName Value="LCL"/>
     252      </Item65>
     253      <Item66>
     254        <PackageName Value="LCL"/>
     255      </Item66>
     256      <Item67>
     257        <PackageName Value="LCL"/>
     258      </Item67>
     259      <Item68>
     260        <PackageName Value="LCL"/>
     261      </Item68>
     262      <Item69>
     263        <PackageName Value="LCL"/>
     264      </Item69>
     265      <Item70>
     266        <PackageName Value="LCL"/>
     267      </Item70>
     268      <Item71>
     269        <PackageName Value="LCL"/>
     270      </Item71>
     271      <Item72>
     272        <PackageName Value="LCL"/>
     273      </Item72>
     274      <Item73>
     275        <PackageName Value="LCL"/>
     276      </Item73>
     277      <Item74>
     278        <PackageName Value="LCL"/>
     279      </Item74>
     280      <Item75>
     281        <PackageName Value="LCL"/>
     282      </Item75>
     283      <Item76>
     284        <PackageName Value="LCL"/>
     285      </Item76>
     286      <Item77>
     287        <PackageName Value="LCL"/>
     288      </Item77>
     289      <Item78>
     290        <PackageName Value="LCL"/>
     291      </Item78>
     292      <Item79>
     293        <PackageName Value="LCL"/>
     294      </Item79>
     295      <Item80>
     296        <PackageName Value="LCL"/>
     297      </Item80>
     298      <Item81>
     299        <PackageName Value="LCL"/>
     300      </Item81>
     301      <Item82>
     302        <PackageName Value="LCL"/>
     303      </Item82>
     304      <Item83>
     305        <PackageName Value="LCL"/>
     306      </Item83>
     307      <Item84>
     308        <PackageName Value="LCL"/>
     309      </Item84>
     310      <Item85>
     311        <PackageName Value="LCL"/>
     312      </Item85>
     313      <Item86>
     314        <PackageName Value="LCL"/>
     315      </Item86>
     316      <Item87>
     317        <PackageName Value="LCL"/>
     318      </Item87>
     319      <Item88>
     320        <PackageName Value="LCL"/>
     321      </Item88>
     322      <Item89>
     323        <PackageName Value="LCL"/>
     324      </Item89>
     325      <Item90>
     326        <PackageName Value="LCL"/>
     327      </Item90>
     328      <Item91>
     329        <PackageName Value="LCL"/>
     330      </Item91>
     331      <Item92>
     332        <PackageName Value="LCL"/>
     333      </Item92>
     334      <Item93>
     335        <PackageName Value="LCL"/>
     336      </Item93>
     337      <Item94>
     338        <PackageName Value="LCL"/>
     339      </Item94>
     340      <Item95>
     341        <PackageName Value="LCL"/>
     342      </Item95>
     343      <Item96>
     344        <PackageName Value="LCL"/>
     345      </Item96>
     346      <Item97>
     347        <PackageName Value="LCL"/>
     348      </Item97>
     349      <Item98>
     350        <PackageName Value="LCL"/>
     351      </Item98>
     352      <Item99>
     353        <PackageName Value="LCL"/>
     354      </Item99>
     355      <Item100>
     356        <PackageName Value="LCL"/>
     357      </Item100>
     358      <Item101>
     359        <PackageName Value="LCL"/>
     360      </Item101>
     361      <Item102>
     362        <PackageName Value="LCL"/>
     363      </Item102>
     364      <Item103>
     365        <PackageName Value="LCL"/>
     366      </Item103>
     367      <Item104>
     368        <PackageName Value="LCL"/>
     369      </Item104>
     370      <Item105>
     371        <PackageName Value="LCL"/>
     372      </Item105>
     373      <Item106>
     374        <PackageName Value="LCL"/>
     375      </Item106>
     376      <Item107>
     377        <PackageName Value="LCL"/>
     378      </Item107>
     379      <Item108>
     380        <PackageName Value="LCL"/>
     381      </Item108>
     382      <Item109>
     383        <PackageName Value="LCL"/>
     384      </Item109>
     385      <Item110>
     386        <PackageName Value="LCL"/>
     387      </Item110>
     388      <Item111>
     389        <PackageName Value="LCL"/>
     390      </Item111>
     391      <Item112>
     392        <PackageName Value="LCL"/>
     393      </Item112>
     394      <Item113>
     395        <PackageName Value="LCL"/>
     396      </Item113>
     397      <Item114>
     398        <PackageName Value="LCL"/>
     399      </Item114>
     400      <Item115>
     401        <PackageName Value="LCL"/>
     402      </Item115>
     403      <Item116>
     404        <PackageName Value="LCL"/>
     405      </Item116>
     406      <Item117>
     407        <PackageName Value="LCL"/>
     408      </Item117>
     409      <Item118>
     410        <PackageName Value="LCL"/>
     411      </Item118>
     412      <Item119>
     413        <PackageName Value="LCL"/>
     414      </Item119>
     415      <Item120>
     416        <PackageName Value="LCL"/>
     417      </Item120>
     418      <Item121>
     419        <PackageName Value="LCL"/>
     420      </Item121>
     421      <Item122>
     422        <PackageName Value="LCL"/>
     423      </Item122>
     424      <Item123>
     425        <PackageName Value="LCL"/>
     426      </Item123>
     427      <Item124>
     428        <PackageName Value="LCL"/>
     429      </Item124>
     430      <Item125>
     431        <PackageName Value="LCL"/>
     432      </Item125>
     433      <Item126>
     434        <PackageName Value="LCL"/>
     435      </Item126>
     436      <Item127>
    61437        <PackageName Value="FCL"/>
    62438        <MinVersion Major="1" Valid="True"/>
    63       </Item2>
     439      </Item127>
    64440    </RequiredPkgs>
    65441    <UsageOptions>
  • ExceptionLogger/UExceptionForm.lfm

    r167 r264  
    11object ExceptionForm: TExceptionForm
    2   Left = 217
     2  Left = 331
    33  Height = 316
    4   Top = 171
    5   Width = 691
     4  Top = 184
     5  Width = 440
    66  Caption = 'Exception info'
    77  ClientHeight = 316
    8   ClientWidth = 691
     8  ClientWidth = 440
    99  OnCreate = FormCreate
    1010  OnDestroy = FormDestroy
    1111  OnShow = FormShow
     12  Position = poScreenCenter
    1213  LCLVersion = '0.9.31'
    13   object ButtonClose: TButton
    14     Left = 611
    15     Height = 25
    16     Top = 286
    17     Width = 75
    18     Anchors = [akRight, akBottom]
    19     Caption = 'Close'
    20     OnClick = ButtonCloseClick
     14  object PanelBasic: TPanel
     15    Left = 0
     16    Height = 80
     17    Top = 0
     18    Width = 440
     19    Align = alTop
     20    BevelOuter = bvNone
     21    ClientHeight = 80
     22    ClientWidth = 440
    2123    TabOrder = 0
     24    object Image1: TImage
     25      Left = 8
     26      Height = 48
     27      Top = 8
     28      Width = 48
     29      OnClick = Image1Click
     30      Picture.Data = {
     31        1754506F727461626C654E6574776F726B477261706869639C0C000089504E47
     32        0D0A1A0A0000000D49484452000000300000003008060000005702F987000000
     33        0473424954080808087C0864880000000970485973000005310000053101B7ED
     34        28520000001974455874536F667477617265007777772E696E6B73636170652E
     35        6F72679BEE3C1A00000C194944415468819D997B8C15D51DC73F67662EE82A25
     36        48C1A5202A015C0571450BCBC3DAB89644DBC20AD18DA08B0FDA8A6F946AFA07
     37        58FF6AB4A90D88CA233654C568A5B12D52A5B0605B828DC6B0AB1850D816581E
     38        AE2F28ECE3DE3B73CEE91F73CEDC33B37797DD4EF2CB9C393373E6FBFDBD6746
     39        68ADE9EF562F84FFF873CFEDBE78DAB431684D6A859ED6B30F1222B9464B09A0
     40        BFDCB7EFC4B3CB97573F77E8D089FE6211FD25502F84D7B070E1CECBC78E9DD2
     41        75F0A08F10699CC9CAA2DBBDC29E0F437418264472E79DC7D7E79E7BF0A5575F
     42        9DDC5F12FD22502F84B760C1827F4CA8ACAC291C39E277BB5308CAAE26045A29
     43        741425C08521288CE4860DE3E4F0E1075FDAB0A15F24FA4CA05E08EFE6B973DF
     44        BD7CE8D069D1891381EE01B09D4F8EB5464B890E43B4520968173C42208060C8
     45        10DA2FBCF0E086D75E9BBC62FFFE3E91E813817A21BC1FD7D6365E397CF84C55
     46        28040950D22E935D494919838FA2546CB8DACF1209060D227FE9A5875E7EE595
     47        2BFB42E28C04EA85F06A274DDA523366CCF7D13AD006B43080DDBB13AB688D8A
     48        A2127833EF824E80675C0920A8A8209A32E5F0FA75EBAE58D9D272F2FF26502F
     49        843F63F4E8CDDF9B38B1567B5ED01368EDBA8C523178A56C96C93C51A4345F8E
     50        889FCB911B3408396DDAD11757AE9CD81B891E09D40BE14F1F3D7AF335975D56
     51        8B10817B4E1B229110F84E1A554AC5C04DC0BAA0BB3DD821A300DF1CFB030712
     52        E47231A920405C7BEDD1F5CF3F7FF9337BF7967527AF47F0A3466DBE66FCF85A
     53        2D65A0A20825254A4AA494A828E2447535A2A181BCE7A195220A43A491A85040
     54        2985520AA914D2DC27A54CCD2B29F9AABA9A13757584410041009E57BABE5844
     55        35368EBC7DD1A28F1EB9F4D2217DB240BD10FEB41123365F535555AB3D2F28E7
     56        32A7A74CA17AC9123CDFA765C70EDAD7AE25572CA2011586E960EE45FBFFBDFA
     57        6A2E5AB8103F0838F2CF7F72F6A64D0CD43AE55A1EB17B45353587376EDC58FD
     58        747373CA12290216FCCCF1E36B112250388169C65D35354C32E0214E932DDBB7
     59        737ACD1ABCCE4ED03A89897275C26EED53A732F6EEBB1142A04C7AFDFCBDF718
     60        F0E69BE4A20861DCCB95AE89130F6EDAB66DB24B2221502F8437BDB272D38C71
     61        E3666908B4035A998BF335354CFAF9CFF10D7877DBB7650B2757AD221786C99C
     62        CE685F1B209D336650F5D39F26E0A513ECC777ED22F7C73F124451CA0296C437
     63        2346EC6F6C6E9E6A4908AD35F54278332A2BFF347DCC981BB41081056D338C06
     64        C2E9D399B874691C6065DC426BCDDEB7DFE6EB679F4D489473A5FCCC994CBCF7
     65        DEE41E4B406B9DB44B9FEFDA45B0716342221143E4B8EF7FB2BDA565E6CA9696
     66        931E40F5B0612BA68F1E7D839232D04EC06A13B0F9C99399F0E8A3E4060C8817
     67        31E2795EEAF8B21B6F64C8FDF793F7BC2458DD40CECF9C49F5830F92CBE5F07D
     68        1FCFF312719552397D3A85BA3A2229E360B7627055168B13AE1E3E7C134000F0
     69        AD8A8A315AA924601331DA97070E70F2F061CE1F3F3E05D8D5BEDD5FFEA31FF1
     70        91D67CB9620541B198685F5E771D572F59D2ED7A571900524AA230A473CF1E72
     71        26366CE1B496F080C11515833063B4D65A3B39DC32D686F180B6360E2C5BC617
     72        FBF7A70894B384E7795C317B36C31E7A887C10C4DABFEE3AA62E5D4A1004DD34
     73        9FB5828C22FEBD762DE7EEDE5DB25E2615CB18A74C2C80751921509482D61DE7
     74        8E1E65EF2F7E81FFD453545655F51807D6AFAF983D1B0D7CD5D4C4CCC71E4B02
     75        56299510752DA14C2D39B07A35E7ECDE8D048494B1C69D2A6DC7CA8F9BE1004A
     76        15D44D9B16BCD63AF63D60C0B1637CBC7429E2996718515565BC43A4DCC25A42
     77        29C59573E6A067CF4E0A984B5A299590F03C8F62B1C8DE55AB38EBC30F898488
     78        B38F7111E58CAD5B2B93B93CF374A5A5041BB84E17A9C2B044504A8263C7685A
     79        B284B6FDFBBBB980750FAB6177ECFB3E4288D435F65C582CB267C50A721F7C90
     80        0AFCC848E246C65226A0753A06A208DB32104509786DC7969494F8478FF2C17D
     81        F7717CDFBE14109788056AC716BCBDDE8EA330E4C35FFF1AB56B5702389232C9
     82        402E09E5C48034BD564CC009601B0F320C636B38016DADA3A4C46B6DE55F8B17
     83        73FCD34F7B0C4A57D316B06B0D1945ECFAD5AF503B77A2A22806EE808E6CFF64
     84        70446E3A554ABB2EA4B594605D258A1277D25296CD4E3A8AF05A5BD9F9939FD0
     85        FAC927F1BC498BBD59C3CECB28E2EF4F3E49F8EEBB4452528C22A2282A3585C6
     86        236414C55AB7C725523A65014C0B9CB88D03B81B196B1929E1D021FEB16811C7
     87        5A5A92AA6A03B61C702B7F7BE2090A3B76C479DF00B4BE1E3969D3ED826D276C
     88        89940838019B803780712BA1012FA328D5FB9F3B793243478E4CB7CB666CDD28
     89        4BE6E26BAF25F4FD52809A349AF57D4BC6BA9174949AA451194528DB0E0B91A4
     90        2A5B059396DA36784A254DDE5975755CFFD45371B595B25B81039274E976BE57
     91        CE9983528A3D4F3E895728942AAD52E079C927188BC577F000844294EA802C16
     92        9504B4E741109472AD5B0FDCB191B3EAEAA87DFAE9B86E285BF248152A2B3616
     93        ECA6B566725D1D4A293EFAE52F93B6C3339F603CCF8BF37E69513044545C479C
     94        4216865A866102500981F63C94EFA33D0FEDFBB1785E426EE0DCB95CFF9BDF24
     95        E05DEDDA42E6565BA02C89AB6EBA090D342F5B865F2CA28C5F7B42E01B12AEE6
     96        2D19690825EFBAA9C6C07ECB911249A9A550C64A036EBD951FFCF6B7B1950C78
     97        2BC9CBB9F93AE1B60B5A6B82204888593257D5D521A5E4A3E5CB5324B4947842
     98        101857745B6B2D84D30B3924B21D4E766E607D3D3F5CB70EA5359109E6245B39
     99        16F03C8F7C6727DF1C3FCEE84B2E4911CC5AC1F77DBE3B772E52299A972F2757
     100        28A4DFEAA44CDA08EB4ACAB580CBAC3722B9FA7A66AF5F1F9BB0584C9AB02443
     101        39EE12160AFCF9673FA3B8772FD76FD8C0459326A580FBBE9F6AFE7CDF67EABC
     102        792829695EB62C2641ECF36E105B5C61189662C03D518E8800F4BC79CC5AB306
     103        CFF7136DBB005C572AE6F3BCB57831C5AD5B51C0DF162C609621612D642D612D
     104        60AD3365DE3C8AF93C4D8F3FCE804201DF80F48D48B3CFC7C338461408D50BF8
     105        FCAC597C6FE54A8479D372DFA05C02524ABA3A3A78EB9E7B905BB726F7CBC387
     106        7967FE7CFED3DC9CEAEB2DF86CD59E317F3E973CF1442AE3653F656A03D50338
     107        0C2F1F80B628033C71A3A6268E998767DB62D70A5D1D1DBC73EFBDB06D5B37F7
     108        93ADADBCBD604137126E7F648914BABA38EEACE18297401B9C3A047F4F08ACD1
     109        FACD2678E03368CB672CE001155F7CC1DE3BEFE4E0FBEFA71EEA92C87776B2ED
     110        FEFBF11A1BCB2A4100AAB595CD652C9105FFFADD77736AFBF66EE023E0389C6E
     111        81D56BB55E9E103024DED8030F7F065FB6537A89B052D1D6C6C70D0DB4BCF71E
     112        52CA941B15BABA68BCEF3E7C07BC0765C7FAC811DECA90B02F355D1D1DBCD4D0
     113        C0C96DDBBA7D3F2D00C7A0FD28AC5EAFF5E31677EAD3E23AAD5FFB141E38005F
     114        9D328C5D00156D6D34DD761B9FEEDC9968AC98CFD3B87831B9C6C6B800F500DC
     115        3DA75A5BD974EBADFCBBA92921D1D5D1C14BB7DFCEC9AD5B536F63009DB1E6DB
     116        DB60F5EFB57ECCC55CF6E3EE2221EA2F805517C2B7071367015BC824D0515949
     117        CD1B6F30ACAA8ABFDC761B62CB96E49CCA5CAB7A11316A14735E7F9DF3C78E65
     118        434303DF6CD99200F7CDBE03F81ADA4FC19A0D5A2FCD62EDF1EBF45D42DC3212
     119        9E1F0D4387664828E0746525FE8409F88D8D3D023E13016D489C3D6E1CA777EC
     120        8801399A6F07BE80F64E58FBAAD68F96C3D9EBFF81BB84B8F97C7861140C3D1F
     121        1870066067029C05EFA6C90490D99F043E87CE3CAC7D4DEB253D613CE31F9ABB
     122        84B87908BC70010C1D090C3C03D09ECEE932E36C7EB7FF0ABE068E416711D6BC
     123        AEF523BDE1EBD33FB23B84B865704CE2BC0B80B3CF40A22F04CA152805B40147
     124        A13384757FD0FAE13361EBF35FCA3B84B8E51C43E26243C26ADC16982CD0DE5C
     125        264B40C6C039029D511FC1F78B00C042216E390B568F8221E3808A1EC0F6E632
     126        E55C27020E0387A053C1BA37FA08BEDF0420B6440ED67E07068FA37B76B202DD
     127        5DA6A7DEA61538085D1AD66DD4FAA1FEE0E93701803B8598AFE0F94130D8CEB9
     128        C05499B972BFAAEC760ABA04BCB851EB07FA8BA52C0111F7086E176BC5D618FF
     129        06985501B38D5695E90E85B6EB6680965153C24943F35FE17794C2CA8A7B1C01
     130        5267000BD387FB40CE80CB19F0FF8FF899B1ED0AAC612C10572410F6636FEF2B
     131        0251CA02A639B30FB56012AD3B73D97DD65A760D1C0256EB298D668864CF9513
     132        ED5AE17F98412D151886AE050000000049454E44AE426082
     133      }
     134    end
     135    object Label1: TLabel
     136      Left = 69
     137      Height = 14
     138      Top = 8
     139      Width = 196
     140      Caption = 'Error occured during program execution:'
     141      ParentColor = False
     142    end
     143    object LabelMessage: TLabel
     144      Left = 80
     145      Height = 46
     146      Top = 24
     147      Width = 296
     148      Anchors = [akTop, akLeft, akBottom]
     149      AutoSize = False
     150      Caption = '   '
     151      ParentColor = False
     152      WordWrap = True
     153    end
    22154  end
    23   object ButtonKill: TButton
    24     Left = 521
    25     Height = 25
    26     Top = 286
    27     Width = 75
    28     Anchors = [akRight, akBottom]
    29     Caption = 'Terminate'
    30     OnClick = ButtonKillClick
     155  object PanelDescription: TPanel
     156    Left = 0
     157    Height = 204
     158    Top = 80
     159    Width = 440
     160    Align = alClient
     161    BevelOuter = bvNone
     162    ClientHeight = 204
     163    ClientWidth = 440
    31164    TabOrder = 1
     165    object PageControl1: TPageControl
     166      Left = 8
     167      Height = 202
     168      Top = 0
     169      Width = 427
     170      ActivePage = TabSheet2
     171      Anchors = [akTop, akLeft, akRight, akBottom]
     172      TabIndex = 1
     173      TabOrder = 0
     174      object TabSheet1: TTabSheet
     175        Caption = 'General'
     176        ClientHeight = 190
     177        ClientWidth = 670
     178        object MemoExceptionInfo: TMemo
     179          Left = 4
     180          Height = 175
     181          Top = 3
     182          Width = 664
     183          Anchors = [akTop, akLeft, akRight, akBottom]
     184          ReadOnly = True
     185          ScrollBars = ssAutoBoth
     186          TabOrder = 0
     187          WordWrap = False
     188        end
     189      end
     190      object TabSheet2: TTabSheet
     191        Caption = 'Call stack'
     192        ClientHeight = 176
     193        ClientWidth = 419
     194        object ListView1: TListView
     195          Left = 4
     196          Height = 166
     197          Top = 7
     198          Width = 413
     199          Anchors = [akTop, akLeft, akRight, akBottom]
     200          Columns = <         
     201            item
     202              Caption = 'Index'
     203              Width = 40
     204            end         
     205            item
     206              Caption = 'Address'
     207              Width = 75
     208            end         
     209            item
     210              Caption = 'Line'
     211              Width = 71
     212            end         
     213            item
     214              Caption = 'Class'
     215              Width = 150
     216            end         
     217            item
     218              Caption = 'Procedure/method'
     219              Width = 150
     220            end         
     221            item
     222              Caption = 'Unit'
     223              Width = 150
     224            end>
     225          ReadOnly = True
     226          RowSelect = True
     227          TabOrder = 0
     228          ViewStyle = vsReport
     229        end
     230      end
     231    end
    32232  end
    33   object PageControl1: TPageControl
    34     Left = 8
    35     Height = 277
    36     Top = 3
    37     Width = 678
    38     ActivePage = TabSheet2
    39     Anchors = [akTop, akLeft, akRight, akBottom]
    40     TabIndex = 1
     233  object PanelButtons: TPanel
     234    Left = 0
     235    Height = 32
     236    Top = 284
     237    Width = 440
     238    Align = alBottom
     239    BevelOuter = bvNone
     240    ClientHeight = 32
     241    ClientWidth = 440
    41242    TabOrder = 2
    42     object TabSheet1: TTabSheet
    43       Caption = 'General'
    44       ClientHeight = 251
    45       ClientWidth = 670
    46       object MemoExceptionInfo: TMemo
    47         Left = 4
    48         Height = 236
    49         Top = 3
    50         Width = 664
    51         Anchors = [akTop, akLeft, akRight, akBottom]
    52         ReadOnly = True
    53         ScrollBars = ssAutoBoth
    54         TabOrder = 0
    55         WordWrap = False
    56       end
    57     end
    58     object TabSheet2: TTabSheet
    59       Caption = 'Call stack'
    60       ClientHeight = 251
    61       ClientWidth = 670
    62       object ListView1: TListView
    63         Left = 4
    64         Height = 241
    65         Top = 7
    66         Width = 664
    67         Anchors = [akTop, akLeft, akRight, akBottom]
    68         Columns = <       
    69           item
    70             Caption = 'Index'
    71             Width = 40
    72           end       
    73           item
    74             Caption = 'Address'
    75             Width = 75
    76           end       
    77           item
    78             Caption = 'Line'
    79             Width = 71
    80           end       
    81           item
    82             Caption = 'Class'
    83             Width = 150
    84           end       
    85           item
    86             Caption = 'Procedure/method'
    87             Width = 150
    88           end       
    89           item
    90             Caption = 'Unit'
    91             Width = 150
    92           end>
    93         ReadOnly = True
    94         RowSelect = True
    95         TabOrder = 0
    96         ViewStyle = vsReport
    97       end
    98     end
    99   end
    100   object CheckBoxIgnore: TCheckBox
    101     Left = 10
    102     Height = 17
    103     Top = 288
    104     Width = 169
    105     Anchors = [akLeft, akBottom]
    106     Caption = 'Next time ignore this exception'
    107     TabOrder = 3
     243    object ButtonKill: TButton
     244      Left = 296
     245      Height = 25
     246      Top = 4
     247      Width = 67
     248      Anchors = [akRight, akBottom]
     249      Caption = 'Terminate'
     250      OnClick = ButtonKillClick
     251      TabOrder = 0
     252    end
     253    object ButtonClose: TButton
     254      Left = 368
     255      Height = 25
     256      Top = 4
     257      Width = 67
     258      Anchors = [akRight, akBottom]
     259      Caption = 'Close'
     260      OnClick = ButtonCloseClick
     261      TabOrder = 1
     262    end
     263    object CheckBoxIgnore: TCheckBox
     264      Left = 10
     265      Height = 17
     266      Top = 8
     267      Width = 169
     268      Anchors = [akLeft, akBottom]
     269      Caption = 'Next time ignore this exception'
     270      TabOrder = 2
     271    end
     272    object ButtonDetails: TButton
     273      Left = 224
     274      Height = 25
     275      Top = 4
     276      Width = 67
     277      Anchors = [akRight, akBottom]
     278      Caption = 'Details'
     279      OnClick = ButtonDetailsClick
     280      TabOrder = 3
     281    end
    108282  end
    109283end
  • ExceptionLogger/UExceptionForm.lrt

    r167 r264  
    11TEXCEPTIONFORM.CAPTION=Exception info
    2 TEXCEPTIONFORM.BUTTONCLOSE.CAPTION=Close
    3 TEXCEPTIONFORM.BUTTONKILL.CAPTION=Terminate
     2TEXCEPTIONFORM.LABEL1.CAPTION=Error occured during program execution:
     3TEXCEPTIONFORM.LABELMESSAGE.CAPTION=   
    44TEXCEPTIONFORM.TABSHEET1.CAPTION=General
    55TEXCEPTIONFORM.TABSHEET2.CAPTION=Call stack
     
    1010TEXCEPTIONFORM.LISTVIEW1.COLUMNS[4].CAPTION=Procedure/method
    1111TEXCEPTIONFORM.LISTVIEW1.COLUMNS[5].CAPTION=Unit
     12TEXCEPTIONFORM.BUTTONKILL.CAPTION=Terminate
     13TEXCEPTIONFORM.BUTTONCLOSE.CAPTION=Close
    1214TEXCEPTIONFORM.CHECKBOXIGNORE.CAPTION=Next time ignore this exception
     15TEXCEPTIONFORM.BUTTONDETAILS.CAPTION=Details
  • ExceptionLogger/UExceptionForm.pas

    r167 r264  
    77uses
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9   CustomLineInfo, ComCtrls, UStackTrace;
     9  CustomLineInfo, ComCtrls, ExtCtrls, UStackTrace, UExceptionLogger;
    1010
    1111type
     
    1616
    1717  TExceptionForm = class(TForm)
     18    ButtonDetails: TButton;
     19    ButtonClose: TButton;
    1820    ButtonKill: TButton;
    19     ButtonClose: TButton;
    2021    CheckBoxIgnore: TCheckBox;
     22    Image1: TImage;
     23    Label1: TLabel;
     24    LabelMessage: TLabel;
    2125    ListView1: TListView;
    2226    MemoExceptionInfo: TMemo;
    2327    PageControl1: TPageControl;
     28    PanelBasic: TPanel;
     29    PanelDescription: TPanel;
     30    PanelButtons: TPanel;
    2431    TabSheet1: TTabSheet;
    2532    TabSheet2: TTabSheet;
    2633    procedure ButtonCloseClick(Sender: TObject);
     34    procedure ButtonDetailsClick(Sender: TObject);
    2735    procedure ButtonKillClick(Sender: TObject);
    2836    procedure FormCreate(Sender: TObject);
    2937    procedure FormDestroy(Sender: TObject);
    3038    procedure FormShow(Sender: TObject);
    31   private
     39    procedure Image1Click(Sender: TObject);
    3240  public
     41    Logger: TExceptionLogger;
    3342    procedure LoadStackTraceToListView(StackTrace: TStackTrace);
    3443  end;
     
    4352procedure TExceptionForm.FormShow(Sender: TObject);
    4453begin
     54  Height := PanelBasic.Height + PanelButtons.Height;
    4555  PageControl1.ActivePageIndex := 0;
    4656  CheckBoxIgnore.Checked := False;
     57end;
     58
     59procedure TExceptionForm.Image1Click(Sender: TObject);
     60begin
     61
    4762end;
    4863
     
    5570begin
    5671  Close;
     72end;
     73
     74procedure TExceptionForm.ButtonDetailsClick(Sender: TObject);
     75begin
     76  if PanelDescription.Height = 0 then
     77    Height := PanelBasic.Height + PanelButtons.Height + 200
     78    else Height := PanelBasic.Height + PanelButtons.Height;
     79  Application.ProcessMessages;
     80  if MemoExceptionInfo.Text = '' then Logger.LoadDetails;
    5781end;
    5882
     
    7296  NewItem: TListItem;
    7397begin
    74   with ListView1, Items do begin
     98  with ListView1, Items do
     99  try
    75100    BeginUpdate;
    76101    Clear;
     
    87112      end;
    88113    end;
     114  finally
    89115    EndUpdate;
    90116  end;
  • ExceptionLogger/UExceptionLogger.pas

    r258 r264  
    1818    FLogFileName: string;
    1919    function GetAppVersion: string;
     20    procedure SetMaxCallStackDepth(const AValue: Integer);
    2021    procedure MakeReport;
    21     procedure SetMaxCallStackDepth(const AValue: Integer);
     22    procedure ShowForm;
    2223  public
    2324    StackTrace: TStackTrace;
    2425    LastException: Exception;
     26    ExceptionSender: TObject;
    2527    IgnoreList: TStringList;
     28    procedure LoadDetails;
    2629    constructor Create(AOwner: TComponent); override;
    2730    destructor Destroy; override;
     
    146149  StackTrace.GetExceptionBackTrace;
    147150  LastException := E;
    148   if Sender is TThread then TThread.Synchronize(TThread(Sender), MakeReport)
    149     else MakeReport;
     151  ExceptionSender := Sender;
     152  if ExceptionSender is TThread then
     153    TThread.Synchronize(TThread(ExceptionSender), ShowForm)
     154    else ShowForm;
    150155end;
    151156
     
    154159  Report: TStringList;
    155160begin
     161  StackTrace.GetInfo;
    156162  if IgnoreList.IndexOf(LastException.ClassName) = -1 then begin
    157163    Report := TStringList.Create;
     
    170176      IgnoreList.Add(LastException.ClassName);
    171177  end;
     178end;
     179
     180procedure TExceptionLogger.ShowForm;
     181begin
     182  ExceptionForm.Logger := Self;
     183  ExceptionForm.LabelMessage.Caption := LastException.Message;
     184  ExceptionForm.MemoExceptionInfo.Clear;
     185  if not ExceptionForm.Visible then ExceptionForm.ShowModal;
     186end;
     187
     188procedure TExceptionLogger.LoadDetails;
     189begin
     190  if ExceptionSender is TThread then
     191    TThread.Synchronize(TThread(ExceptionSender), MakeReport)
     192    else MakeReport;
    172193end;
    173194
  • ExceptionLogger/UStackTrace.pas

    r167 r264  
    2222
    2323  TStackTrace = class(TObjectList)
     24    Frames: array of Pointer;
    2425    MaxDepth: Integer;
    2526    procedure GetExceptionBackTrace;
    2627    procedure GetCallStack(BP: Pointer);
    2728    procedure GetCurrentCallStack;
     29    procedure GetInfo;
    2830    constructor Create;
    2931  end;
     
    6668  try
    6769    I := 0;
     70    SetLength(Frames, 0);
    6871    while (BP <> nil) and (I < MaxDepth) do begin
    69       CallerAddress := TStackFrameInfo(get_caller_addr(BP));
    70       StackFrameInfo := TStackFrameInfo.Create;
    71       StackFrameInfo.GetFrameInfo(CallerAddress);
    72       StackFrameInfo.Index := I + 1;
    73       Add(StackFrameInfo);
     72      SetLength(Frames, Length(Frames) + 1);
     73      Frames[I] := TStackFrameInfo(get_caller_addr(BP));
    7474      Inc(I);
    7575      BP := TStackFrameInfo(get_caller_frame(BP));
     
    8989var
    9090  FrameCount: Integer;
    91   Frames: PPointer;
     91  FramesList: PPointer;
    9292  FrameNumber: Integer;
    93   StackFrameInfo: TStackFrameInfo;
    9493begin
    95   Clear;
    96   StackFrameInfo := TStackFrameInfo.Create;
    97   StackFrameInfo.GetFrameInfo(ExceptAddr);
    98   StackFrameInfo.Index := 1;
    99   Add(StackFrameInfo);
     94  SetLength(Frames, 1);
     95  Frames[0] := ExceptAddr;
    10096  FrameCount := ExceptFrameCount;
    101   Frames := ExceptFrames;
     97  FramesList := ExceptFrames;
    10298  if FrameCount > MaxDepth then FrameCount := MaxDepth;
     99  SetLength(Frames, FrameCount + 1);
    103100  for FrameNumber := 0 to FrameCount - 1 do begin
    104     StackFrameInfo := TStackFrameInfo.Create;
    105     StackFrameInfo.GetFrameInfo(Frames[FrameNumber]);
    106     StackFrameInfo.Index := FrameNumber + 1;
    107     Add(StackFrameInfo);
     101    Frames[FrameNumber + 1] := FramesList[FrameNumber]
    108102  end;
    109103end;
     
    114108end;
    115109
     110procedure TStackTrace.GetInfo;
     111var
     112  I: Integer;
     113  StackFrameInfo: TStackFrameInfo;
     114begin
     115  Clear;
     116  for I := 0 to High(Frames) do begin
     117    StackFrameInfo := TStackFrameInfo.Create;
     118    StackFrameInfo.GetFrameInfo(Frames[I]);
     119    StackFrameInfo.Index := I + 1;
     120    Add(StackFrameInfo);
     121  end;
     122end;
     123
    116124end.
    117125
  • ExceptionLogger/languages/UExceptionLogger.cs.po

    r155 r264  
    55"POT-Creation-Date: \n"
    66"PO-Revision-Date: \n"
    7 "Last-Translator: Jiří Hajda <software@mezservis.cz>\n"
     7"Last-Translator: Chronos <robie@centrum.cz>\n"
    88"Language-Team: \n"
    99"MIME-Version: 1.0\n"
     
    3636#: uexceptionlogger.sversion
    3737msgid "Version"
    38 msgstr ""
     38msgstr "Verze"
    3939
Note: See TracChangeset for help on using the changeset viewer.