SharpDevelop Community

Get your problems solved!
Welcome to SharpDevelop Community Sign in | Join | Help
in Search

Error while requesting tooltip: System.InvalidCastException

Last post 07-19-2009 9:07 PM by excess violation. 2 replies.
Page 1 of 1 (3 items)
Sort Posts: Previous Next
  • 06-22-2009 11:12 PM

    Error while requesting tooltip: System.InvalidCastException


    While debugging, SharpDevelop throws an exception each time, I hover any source line with the expression

    myTocData.arTrackData[bTrack]

    if 'arTrackData' is null. E.g. within the line

      var addr = BitConverter.GetBytes(myTocData.arTrackData[bTrack].Address);

    it is possible to hover 'myTocData' and to open the member list in the tooltip by clicking the '+'. It is also possible to hover 'bTrack'. But touching 'Address' or 'arTrackData' leads to an exception, when the tooltip is going to be displayed.


    The arTrackData member of myTocData is a TrackDataArray, which is a class with an indexer:

      [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
      protected sealed class TrackDataArray 
      { 
         // ...

         public TRACK_DATA this[int iIdx]
         {
            get
            {
               if((iIdx<0) || (iIdx>=CdDevice.MAXIMUM_NUMBER_TRACKS))
                  throw new IndexOutOfRangeException();

          //...

    And here's the message:

    SharpDevelop Version : 3.0.0.3800
    .NET Version : 2.0.50727.3053
    OS Version : Microsoft Windows NT 5.1.2600 Service Pack 3
    Current culture : German (Germany) (de-DE)
    Current UI language : en
    Working Set Memory : 138272kb
    GC Heap Memory : 29466kb

    Error while requesting tooltip for location (Line 111, Col 52)
    Exception thrown:
    System.InvalidCastException: Specified cast is not valid.
      at Debugger.AddIn.EvaluateAstVisitor.VisitIndexerExpression(IndexerExpression indexerExpression, Object data)
      at ICSharpCode.NRefactory.Ast.IndexerExpression.AcceptVisitor(IAstVisitor visitor, Object data)
      at Debugger.AddIn.AstEvaluator.Evaluate(String code, SupportedLanguage language, StackFrame context)
      at ICSharpCode.SharpDevelop.Services.WindowsDebugger.GetValueFromName(String variableName)
      at ICSharpCode.SharpDevelop.Services.WindowsDebugger.GetValueAsString(String variableName)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.GetMemberText(IAmbience ambience, IEntity member, String expression, Boolean& debuggerCanShowValue)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.GetText(ResolveResult result, String expression, Boolean& debuggerCanShowValue)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.GetToolTipInfo(TextArea textArea, ToolTipRequestEventArgs e)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerTextAreaToolTipProvider.GetToolTipInfo(TextArea textArea, ToolTipRequestEventArgs e)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.TextAreaToolTipRequest(Object sender, ToolTipRequestEventArgs e)

    ---- Recent log messages:
    22:22:09.765 [1] DEBUG - ActiveViewContentChanged to [TextEditorDisplayBindingWrapper D:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs]
    22:22:09.765 [1] DEBUG - ActiveContentChanged to [TextEditorDisplayBindingWrapper D:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs]
    22:22:09.765 [1] DEBUG - UpdateSelectedObjectIfActive
    22:22:09.765 [1] DEBUG - NavigationService -- resume logging
    22:22:09.765 [1] INFO - FileService
     Jumped to File Position: [d:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs : 111x3]
    22:22:09.781 [1] DEBUG - Debugger: Callback: ExceptionUnwind
    22:22:09.890 [1] DEBUG - Debugger: Callback: EvalComplete
    22:22:10.062 [1] DEBUG - Debugger: Expression cache cleared
    22:22:10.078 [1] DEBUG - Debugger: Callback: EvalComplete
    22:22:10.140 [1] INFO - Repainting Local Variables Pad (0.8831 ms)
    22:22:19.343 [1] DEBUG - Debugger: Debugger event: OnPaused()
    22:22:19.343 [1] INFO - Jump to current line - start
    22:22:19.343 [1] INFO - FileService
     Jumping to File Position: [d:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs : 111x3]
    22:22:19.343 [1] DEBUG - NavigationService -- suspend logging
    22:22:19.343 [1] INFO - Open file d:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs
    22:22:19.343 [1] DEBUG - NavigationService -- resume logging
    22:22:19.343 [1] INFO - FileService
     Jumped to File Position: [d:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs : 111x3]
    22:22:19.343 [1] INFO - Jump to current line - end (2.7205 ms)
    22:22:19.343 [1] INFO - Callstack refresh - start
    22:22:19.578 [1] INFO - Callstack refresh - end (221.8126 ms)
    22:22:24.562 [1] INFO - asking debugger for value of 'myTocData'
    22:22:24.562 [1] DEBUG - Debugger: Callback: EvalComplete
    22:22:27.859 [1] INFO - asking debugger for value of 'myTocData.arTrackData[bTrack]'
    22:22:27.875 [1] ERROR - Error while requesting tooltip for location (Line 111, Col 52)
    --> Exception:
    System.InvalidCastException: Specified cast is not valid.
      at Debugger.AddIn.EvaluateAstVisitor.VisitIndexerExpression(IndexerExpression indexerExpression, Object data)
      at ICSharpCode.NRefactory.Ast.IndexerExpression.AcceptVisitor(IAstVisitor visitor, Object data)
      at Debugger.AddIn.AstEvaluator.Evaluate(String code, SupportedLanguage language, StackFrame context)
      at ICSharpCode.SharpDevelop.Services.WindowsDebugger.GetValueFromName(String variableName)
      at ICSharpCode.SharpDevelop.Services.WindowsDebugger.GetValueAsString(String variableName)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.GetMemberText(IAmbience ambience, IEntity member, String expression, Boolean& debuggerCanShowValue)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.GetText(ResolveResult result, String expression, Boolean& debuggerCanShowValue)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.GetToolTipInfo(TextArea textArea, ToolTipRequestEventArgs e)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerTextAreaToolTipProvider.GetToolTipInfo(TextArea textArea, ToolTipRequestEventArgs e)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.TextAreaToolTipRequest(Object sender, ToolTipRequestEventArgs e)
    22:22:27.937 [1] WARN - Stack trace of last error log:
      at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
      at System.Environment.get_StackTrace()
      at ICSharpCode.Core.MessageService.ShowError(Exception ex, String message)
      at ICSharpCode.SharpDevelop.Debugging.DebuggerService.TextAreaToolTipRequest(Object sender, ToolTipRequestEventArgs e)
      at ICSharpCode.TextEditor.ToolTipRequestEventHandler.Invoke(Object sender, ToolTipRequestEventArgs e)
      at ICSharpCode.TextEditor.TextArea.OnToolTipRequest(ToolTipRequestEventArgs e)
      at ICSharpCode.TextEditor.TextArea.RequestToolTip(Point mousePos)
      at ICSharpCode.TextEditor.TextArea.OnMouseHover(EventArgs e)
      at System.Windows.Forms.Control.WmMouseHover(Message& m)
      at System.Windows.Forms.Control.WndProc(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
      at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.Run(Form mainForm)
      at ICSharpCode.SharpDevelop.Commands.StartWorkbenchCommand.Run(IList`1 fileList)
      at ICSharpCode.SharpDevelop.Sda.CallHelper.RunWorkbenchInternal(Object settings)
      at ICSharpCode.SharpDevelop.Sda.CallHelper.RunWorkbench(WorkbenchSettings settings)
      at ICSharpCode.SharpDevelop.Sda.SharpDevelopHost.RunWorkbench(WorkbenchSettings settings)
      at ICSharpCode.SharpDevelop.SharpDevelopMain.RunApplication()
      at ICSharpCode.SharpDevelop.SharpDevelopMain.Run(String[ args)
      at ICSharpCode.SharpDevelop.SharpDevelopMain.Main(String[ args)

    ---- Post-error application state information:
    Installed 3rd party AddIns: 
    Workbench.ActiveContent: [TextEditorDisplayBindingWrapper D:\Projekte\SharpDevelop\HyperTest\HyperTest\CdToc.cs]
    ProjectService.OpenSolution: [Solution: FileName=D:\Projekte\SharpDevelop\HyperTest\HyperTest.sln, HasProjects=True, ReadOnly=False]
    ProjectService.CurrentProject: [CSharpProject: HyperTest]

  • 07-17-2009 8:27 PM In reply to

    Re: Error while requesting tooltip: System.InvalidCastException

    Do you have a small example app that reproduces this issue?

    What are your debugger settings (Tools > Options > Debugger)?

  • 07-19-2009 9:07 PM In reply to

    Re: Error while requesting tooltip: System.InvalidCastException

    Sorry, app is not that small. I tried to reduce it, but I could not compile or otherwise reproduce error then. Since I do not know, how to post a complete project zip here, I just paste the cs, where it happens.

    The source line causing the xcpt is on the bottom:

      trk.uBCDAddress=myTocData.arTrackData[bTrack].Address;

    And my debugger options are

    Use "just my code" ...: yes

    Step over code w/o symbols: yes

    Step over code marked with dbg attribs: yes

    Step over all properties: no

    Step over single line properties: no

    Step over field access properties: yes

     

    Thanks in advance

     

     Here comes the code:

     

    using System;
    using System.Runtime.InteropServices;

    namespace HyperTest
    {
     /// <summary>
     /// Description of CdToc.
     /// </summary>
     ///

     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]  
     public class CdToc
     {
      [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
      protected struct TRACK_DATA
      {
      public byte Reserved;
      public byte bitVector;
      public byte Control
      {
      get { return ((byte)((this.bitVector & 15u))); }
      set { this.bitVector = ((byte)((value | this.bitVector))); }
      }
       
      public byte Adr
      {
      get { return ((byte)(((this.bitVector & 240u) / 16))); }
      set { this.bitVector = ((byte)(((value * 16) | this.bitVector))); }
      }
       
      public byte TrackNumber;
      public byte Reserved1;
      public uint Address;
       
      }
     
      [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
      protected sealed class TrackDataArray
      {
      internal TrackDataArray()
      {
      abData=new byte[CdDevice.MAXIMUM_NUMBER_TRACKS*Marshal.SizeOf(typeof(TRACK_DATA))];
      }
       
      [MarshalAs(UnmanagedType.ByValArray,SizeConst=CdDevice.MAXIMUM_NUMBER_TRACKS*8)]
      private byte[ abData;
      public TRACK_DATA this[byte bIdx]
      {
      get
      {
      if((bIdx<1) || (bIdx>CdDevice.MAXIMUM_NUMBER_TRACKS))
      throw new IndexOutOfRangeException();
       
      TRACK_DATA res;
      var hData=GCHandle.Alloc(abData,GCHandleType.Pinned);  
      try
      {  
      var buffer=hData.AddrOfPinnedObject();
      buffer=(IntPtr)(buffer.ToInt32()+((bIdx-1)*Marshal.SizeOf(typeof(TRACK_DATA))));
      res=(TRACK_DATA)Marshal.PtrToStructure(buffer,typeof(TRACK_DATA));  
      }
      finally
      {  
      hData.Free();  
      }  
      return res;  
      }
      }  
      }
       
      [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
      protected sealed class TocData
      {
      public ushort wLength;
      public byte bFirstTrack;
      public byte bLastTrack;
      public TrackDataArray arTrackData;
      }
     
      protected CdDevice myDevice;
      protected TocData myTocData;

      protected TRACK_DATA myTrackData(byte bTrack)
      {
      if((bTrack<1) || (bTrack>myTocData.bLastTrack))
      throw new IndexOutOfRangeException();
      return myTocData.arTrackData[bTrack];
      }
     
      public byte FirstTrack
      {
      get { return myTocData.bFirstTrack; }
      private set { myTocData.bFirstTrack=value; }
      }
     
      public byte LastTrack
      {
      get { return myTocData.bLastTrack; }
      private set { myTocData.bLastTrack=value; }
      }
     
      public CdToc(CdDevice cdr)
      {
      myDevice=cdr;
      myTocData=new TocData();
      }
     
      public void update()
      {
      uint uBytesRead=0;
      int iErr=0;

      //var uSizeToc=(int)(Marshal.SizeOf(myTocData)+CdDevice.MAXIMUM_NUMBER_TRACKS*Marshal.SizeOf(typeof(TRACK_DATA)));
      var uSizeToc=64000;
      myTocData.wLength=(ushort)Marshal.SizeOf(myTocData);
      var hTOC=Marshal.AllocHGlobal(uSizeToc);
      try
      {
      Marshal.StructureToPtr(myTocData,hTOC,true);
      if(0==(iErr=myDevice.IoControl(CdIoCtl.READ_TOC,IntPtr.Zero,
      0,hTOC,(uint)uSizeToc,out uBytesRead,IntPtr.Zero)))
      Marshal.PtrToStructure(hTOC,myTocData);
      }
      finally
      {
      Marshal.FreeHGlobal(hTOC);
      }
      }
     
      public CdTrack getTrack(byte bTrack)
      {
      if((bTrack<1) || (bTrack>myTocData.bLastTrack))
      throw new IndexOutOfRangeException();
       
      CdTrack trk=new CdTrack(myDevice,bTrack);  
      trk.uBCDAddress=myTocData.arTrackData[bTrack].Address;
      return trk;
      }
     }
    }

Page 1 of 1 (3 items)
Powered by Community Server (Commercial Edition), by Telligent Systems
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.