Skip to content
This repository has been archived by the owner on Aug 27, 2023. It is now read-only.

Latest commit

 

History

History
25 lines (15 loc) · 2.07 KB

debugging-notes.md

File metadata and controls

25 lines (15 loc) · 2.07 KB
layout title
page
Debugging Notes

Debugging user code in your add-in

I don't usually have issues debugging the managed add-in's user-defined functions and commands.

There is a trick needed to set up the debugging when using the Express editions - the project file must be edited by hand to set the native executable to run. This is discussed here: https://groups.google.com/group/exceldna/browse_thread/thread/6767ac80f2bb3f11.

Debugging the Excel-DNA integration libraries

This is from a discussion on the Google group - https://groups.google.com/group/exceldna/browse_frm/thread/b2d93b2e5e986bbd

Debugging the managed Excel-DNA integration libraries can be a bit tricky sometimes.

When recompiling (only for the Debug - Win32 configuration), you'll see the ExcelDna.Loader.dll and ExcelDna.Integration.dll copied to the output (Source\ExcelDna\Debug) directory. Then, when the add-in is loaded from there, these assemblies are loaded from the files and not the packed versions. So you need not fiddle with the packing for the debugging to work - you just need those assemblies as files next to the .xll - then the files are loaded and the packed versions ignored. They have to be up-to-date though, else the debugger won't match your code with the loaded .dlls.

The following works for me:

  • Make sure you rebuild everything - when you set up 'ExcelDna.Integration' for debugging, the ExcelDna project might not rebuild, so the ExcelDna.Integration in the (Source\ExcelDna\Debug) directory might not be updated. When in doubt I just press Build->Batch Build->Rebuild All, and then I'm sure it's OK.

  • I start Excel on its own, then attach the debugger, then load the add-in. This seems more reliable than starting the debugger

  • Another trick I have use sometimes is to put a Debug.Assert(false) somewhere in the loading path - this allows you to select the debugger when the assertion failure breaks the process.