Strange Exception in the framework

Started by
7 comments, last by Stefan Fischlschweiger 9 years, 2 months ago

So, I've figured out the last problem in my project, only to run straight into the next one.

When selecting "New Game" in the main menu I get a FileNotFoundException from mscorlib.dll

By stepping through the code with the debugger I found that it happens when this function has finished:


protected override void Update(GameTime gameTime)
        {
                _screenManager.Update(gameTime);
                base.Update(gameTime);        
        }

To be precise, when in debug mode and the current "instruction" is the closing curly bracket I press F11 and the exception happens. I only see that in the output windows though, which says:

An exception (first chance) of type "System.IO.FileNotFoundException" was thrown in mscorlib.dll

No information on what file it was attempting to access or anything, just this line. The game code isn't supposed to load any file at that point anyway, so my guess is that something is going wrong in the framework itself.

Also, the code runs fine on my other system

Advertisement
You haven't really provided enough information for us to provide you with any meaningful answers.

The chances that this is "something going wrong in the framework itself" are vanishingly slim, thus it must be something on your machine. Something you didn't copy, something you depend upon, etc.

What is the stack trace of the exception? In fact, what is the exact output of the exception... etc. are all things we'll need to assist you in any efforts to debug this.

In time the project grows, the ignorance of its devs it shows, with many a convoluted function, it plunges into deep compunction, the price of failure is high, Washu's mirth is nigh.

Problem is, I don't get any stack trace or anything. Just one line in Visual Studio's output window. Without that I wouldn't even know that an exception has happened. The popup window containing that information doesn't appear. The dependencies of the project are all set

(EDIT) You can safely ignore first-chance exceptions, unless it isn't handled. Since you're not getting a callstack, I believe it's being handled.

"First-chance" means an exception is being thrown somewhere, and the debugger is able to capture it *before* it looks for a catch block for it. There are unfortunately quite a few things in .Net (especially in the Core framework) that will throw-and-then-catch exceptions internally, which result in this kind of noise in the output window.

You can demonstrate the same kind of behavior with the following code, if you want:



try
{
    throw new FileNotFoundException();
}
catch
{
}

Maybe, would be cool to know what mscorlib is looking for, but without any details on the exception all I can do is guess.

Got any clue on how I could get those details?

There are two things you might try:

First, you can tell the debugger to stop when a first-chance exception occurs. In Debug -> Exceptions, enable the checkbox next to "Common Language Runtime Exceptions". This will suspend the program whenever any of the exception types in that category occur (including FileNotFoundException - you can enable the checkbox for JUST that one if you want to go digging for it). This will give you a callstack when the exception occurs and MIGHT let you see the filename.


Second, you can try enabling .Net framework source stepping. I've had varying levels of success with this, so it may not help us here...

https://msdn.microsoft.com/en-us/library/cc667410.aspx

What is supposed to happen after the function has returned? The only files the CLR should look up for on its own is assemblies and their native DLL.

Since it's a "New Game" function, I suspect that the next step makes the first method call to a type located in a different assembly. The CLR does lazy loading with assemblies, so it waits until the code uses an assembly to load it in process memory.

I would double-check that you have all required DLL in your program's folder, especially the native DLL dependencies if you have any. MSBuild is usually smart enough to put the custom .NET assemblies in the output folder, but not the native ones.

Does this exception cause any problem? It's unclear from your post. Does your game still run?

Does this exception cause any problem? It's unclear from your post. Does your game still run?

Yep, sorry, missed that out. When the exception happens the game just quits

After the exception message I get a bunch of "Thread xy has ended with code 1 (0x1)" and some D3D11 Warnings

There are two things you might try:

First, you can tell the debugger to stop when a first-chance exception occurs. In Debug -> Exceptions, enable the checkbox next to "Common Language Runtime Exceptions". This will suspend the program whenever any of the exception types in that category occur (including FileNotFoundException - you can enable the checkbox for JUST that one if you want to go digging for it). This will give you a callstack when the exception occurs and MIGHT let you see the filename.


Second, you can try enabling .Net framework source stepping. I've had varying levels of success with this, so it may not help us here...

https://msdn.microsoft.com/en-us/library/cc667410.aspx

Thanks, enabling CLR exceptions did the trick biggrin.png

It was looking for a file that I created manually in the output folder on my other system to test some stuff and whích is missing on my laptop

I already had a try-catch on the code responsible to create the stream set to catch FileNotFound exceptions and write the name of the file in question into the logfile.

Now I feel really stupid ^^ All I actually would have had to do was look at the logfile -.-

This topic is closed to new replies.

Advertisement