View Issue Details

IDProjectCategoryView StatusLast Update
0000019Ecere SDKide:debuggerpublic2014-05-19 01:32
Reporterjerome Assigned Tojerome  
PriorityimmediateSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Target Version0.44.10 64Fixed in Version0.44.10 64 
Summary0000019: Memory can't be read at (null) error in watches ...
Descriptiondeclaration.type DeclarationType Memory can't be read at (null)
declaration Declaration Memory can't be read at (null)
external External 0x00000000

It seems this was caused by an out of date build...
Improve watch error messages.

Call stack:

  0 PrePreProcessClassDefinitions Function, src\firstPass.ec:574
  1 ProcessDBTableDefinitions Function, src\dbpass.ec:1115
  2 CompilerApp_Main Method, ecc.ec:399
  3 main Function, Debug\ecc.main.ec:438


            else if(external.type == declarationExternal)
            {
               Declaration declaration = external.declaration;
               if(declaration.type == initDeclaration)
               {
Additional InformationCode to reproduce:

class TestClass { int bla; };

class MyApp : Application
{
   void Main()
   {
      TestClass test = null;
      printf("");
   }
}

Put a breakpoint at printf and watch test.a
TagsNo tags attached.

Relationships

related to 0000502 closedjerome ide: debugger: watches: Watching this in class Color : int 's OnDisplay : Memory can't be read at (null) 
related to 0000535 closedjerome Implement a fall-back for failing watch evaluations 

Activities

jerome

2008-05-05 18:50

administrator   ~0000026

Last edited: 2008-05-06 03:39

It seems this particular error message is given because the expression evaluator attempts to evaluate a member of a null pointer.

The whole usage of Expression::type to identify errors in watches is obscure/broken at the moment.

Debugger::ReadMemory returns an ExpressionType error, which is then simply assigned to the type of the expression being evaluated, thus losing any valuable information about the previous type of error (Which would indicate in the other fields what the address that was evaluated was).

Yet, the Debugger::ResolveWatch watch method still uses that "type" member checking it is a constantExp (ironically, in a "case memoryErrorExp", therefore it is always false). This results in all memory errors to be displayed as

"Memory can't be read at (null)"

We would like to see the address in hexadecimal here.

Consider using a different data member or completely different approach to identify an error. Investigate and document a proper way for the error codes to be propagated across the different steps of evaluation.

Additionally, there is great inconsistency in the watch errors. When initially opening a workspace, the "Debugger Required" message appears for all watches (except those without an identifier, e.g. "1"). When hitting F10, all change to "No source file found for selected frame" which should only appear for those requiring a local identifier, global symbols (and constants) should still evaluate without a source file.

Then when hitting Shift-F5, all watches are blanked out (as opposed to "Debugger Required"), even the constant ones which should still evaluate.
(Special case to fix here: string literals!)

jerome

2014-05-04 00:31

administrator   ~0001263

Fixed by:
https://github.com/ecere/ecere-sdk/commit/33c5435e63e0e3373d4a94726daa2e57154bd60c

Issue History

Date Modified Username Field Change
2008-04-09 18:19 jerome New Issue
2008-04-09 18:21 jerome Description Updated
2008-04-09 18:24 jerome Description Updated
2008-04-09 18:25 jerome Description Updated
2008-04-09 18:31 jerome Description Updated
2008-04-30 20:04 jerome Status new => assigned
2008-04-30 20:04 jerome Assigned To => jerome
2008-05-02 01:06 jerome Priority normal => high
2008-05-05 18:50 jerome Note Added: 0000026
2008-05-05 18:50 jerome Assigned To jerome => redj
2008-05-05 18:50 jerome Additional Information Updated
2008-05-06 03:39 jerome Note Edited: 0000026
2008-05-06 03:39 jerome Note Edited: 0000026
2010-08-07 18:09 jerome Status assigned => new
2010-08-07 18:11 jerome Assigned To redj =>
2010-08-07 20:44 jerome Relationship added related to 0000535
2012-03-08 16:52 redj Target Version => 0.45 Ginkakuji
2012-03-29 07:52 redj Category => ide
2012-03-29 07:52 redj Project @3@ => Ecere SDK
2013-04-24 07:47 jerome Target Version 0.45 Ginkakuji => 0.44.1 64
2013-04-24 07:48 jerome Relationship added related to 0000502
2013-04-24 20:19 jerome Priority high => immediate
2013-08-08 05:50 jerome Category ide => ide:debugger
2014-04-30 09:41 jerome Assigned To => jerome
2014-04-30 09:41 jerome Status new => assigned
2014-04-30 09:41 jerome ETA none => < 1 day
2014-04-30 09:41 jerome Target Version 0.44.12 Fixes => 0.44.10 64
2014-05-04 00:31 jerome Status assigned => resolved
2014-05-04 00:31 jerome Fixed in Version => 0.44.10 64
2014-05-04 00:31 jerome Resolution open => fixed
2014-05-04 00:31 jerome Note Added: 0001263
2014-05-19 01:32 jerome Status resolved => closed