Por que "otimizar o código" é necessário para ser ativado para que meu programa seja executado sem travar?

StackOverflow https://stackoverflow.com/questions/2068482

Pergunta

Recebi esse aplicativo WPF, quando tentei executar o programa no modo de depuração, ele travaria antes de chegar ao Windows1.xml. Mais tarde, tentei executar no modo de liberação e ele funcionaria com sucesso. Eu o reduzi a isso, eu precisava ativar o "Código de otimizar" para que ele funcionasse.

Nota: Pontos de interrupção, entrando em depuração e parando as exceções de arremesso não funcionam.

Editar: A exceção foi WPF (muito popular e não útil) exceção genérica:

{"Não é possível criar a instância de 'main' definida na montagem 'vcell2, versão = 1.0.0.0, cultura = neutro, publicKeyToken = null'. A exceção foi lançada pelo alvo de uma invocação. Erro no arquivo de marcação 'window1.xaml' Linha 1 posição 9. "} Fonte = "ApresentationFramework" lineNumber = 1 linePosition = 9

Editar: A exceção interna - interna: {"O módulo especificado não pôde ser encontrado. (Exceção de HRESULT: 0x8007007E)": null}

Aqui estava o rastreamento da pilha que eu estava recebendo:

   at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType)
   at System.Windows.Markup.XamlParseException.ThrowException(ParserContext parserContext, Int32 lineNumber, Int32 linePosition, String message, Exception innerException)
   at System.Windows.Markup.BamlRecordReader.ThrowExceptionWithLine(String message, Exception innerException)
   at System.Windows.Markup.BamlRecordReader.CreateInstanceFromType(Type type, Int16 typeId, Boolean throwOnFail)
   at System.Windows.Markup.BamlRecordReader.GetElementAndFlags(BamlElementStartRecord bamlElementStartRecord, Object& element, ReaderFlags& flags, Type& delayCreatedType, Int16& delayCreatedTypeId)
   at System.Windows.Markup.BamlRecordReader.BaseReadElementStartRecord(BamlElementStartRecord bamlElementRecord)
   at System.Windows.Markup.BamlRecordReader.ReadElementStartRecord(BamlElementStartRecord bamlElementRecord)
   at System.Windows.Markup.BamlRecordReader.ReadRecord(BamlRecord bamlRecord)
   at System.Windows.Markup.BamlRecordReader.Read(Boolean singleRecord)
   at System.Windows.Markup.TreeBuilderBamlTranslator.ParseFragment()
   at System.Windows.Markup.TreeBuilder.Parse()
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
   at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
   at System.Windows.Application.DoStartup()
   at System.Windows.Application.<.ctor>b__0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at VCell2.App.Main() in C:\Users\wandrus\Documents\Visual Studio 2008\Projects\VCell2\VCell2\obj\Debug\App.g.cs:line 0

Editar Eu tentei executá -lo windbg (não sei se estou fazendo isso corretamente)

ModLoad: 77310000 773b0000   C:\Windows\system32\ADVAPI32.dll
ModLoad: 76a30000 76adc000   C:\Windows\system32\msvcrt.dll
ModLoad: 76c60000 76c79000   C:\Windows\SYSTEM32\sechost.dll
ModLoad: 76ae0000 76b82000   C:\Windows\system32\RPCRT4.dll
ModLoad: 770c0000 77117000   C:\Windows\system32\SHLWAPI.dll
ModLoad: 76940000 7698e000   C:\Windows\system32\GDI32.dll
ModLoad: 76c80000 76d49000   C:\Windows\system32\USER32.dll
ModLoad: 778e0000 778ea000   C:\Windows\system32\LPK.dll
ModLoad: 77120000 771bd000   C:\Windows\system32\USP10.dll
ModLoad: 76ea0000 76ebf000   C:\Windows\system32\IMM32.DLL
ModLoad: 76b90000 76c5c000   C:\Windows\system32\MSCTF.dll
ModLoad: 6c1b0000 6c1b5000   C:\Windows\system32\avgrsstx.dll
ModLoad: 57310000 578a1000   C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
ModLoad: 756a0000 7573b000   C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4918_none_d089094c442eb5ff\MSVCR80.dll
ModLoad: 75c40000 76886000   C:\Windows\system32\shell32.dll
ModLoad: 773c0000 7751b000   C:\Windows\system32\ole32.dll
ModLoad: 75810000 7581b000   C:\Windows\system32\profapi.dll
ModLoad: 53de0000 548d8000   C:\Windows\assembly\NativeImages_v2.0.50727_32\mscorlib\70603943245265de9397091048337dda\mscorlib.ni.dll
ModLoad: 757a0000 757ac000   C:\Windows\system32\CRYPTBASE.dll
ModLoad: 744f0000 74530000   C:\Windows\system32\uxtheme.dll
ModLoad: 52ea0000 53639000   C:\Windows\assembly\NativeImages_v2.0.50727_32\System\ade9214f5bce88462742bce1278864c0\System.ni.dll
ModLoad: 57ae0000 57e0c000   C:\Windows\assembly\NativeImages_v2.0.50727_32\WindowsBase\c7663f3a74fb6aa480c60108634d285a\WindowsBase.ni.dll
ModLoad: 03eb0000 04a5b000   C:\Windows\assembly\NativeImages_v2.0.50727_32\PresentationCore\c79b7f336e6099b8c94081f975e9411e\PresentationCore.ni.dll
ModLoad: 55240000 55fec000   C:\Windows\assembly\NativeImages_v2.0.50727_32\PresentationFramewo#\7d80b7d912fbf0f7532f1b9adc235646\PresentationFramework.ni.dll
ModLoad: 00e50000 01255000   PresentationCore.dll
ModLoad: 00e50000 01255000   PresentationCore.dll
ModLoad: 539d0000 53b7c000   C:\Windows\Microsoft.NET\Framework\v3.0\WPF\wpfgfx_v0300.dll
ModLoad: 76990000 76a1f000   C:\Windows\system32\OLEAUT32.dll
ModLoad: 51520000 51754000   C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Core\e78709bedd31f237055667ad99b9451f\System.Core.ni.dll
ModLoad: 6cbc0000 6cc1b000   C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
ModLoad: 637d0000 638c1000   C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Configuration\9c2727d244dcc72fbefcf1ae22660f35\System.Configuration.ni.dll
ModLoad: 57f20000 58456000   C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Xml\93d38ea87365928456313035f8091126\System.Xml.ni.dll
ModLoad: 74130000 74143000   C:\Windows\system32\dwmapi.dll
ModLoad: 60340000 60348000   C:\Windows\Microsoft.NET\Framework\v2.0.50727\culture.dll
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): CLR exception - code e0434f4d (first chance)
(1e2c.738): C++ EH exception - code e06d7363 (first chance)
(1e2c.738): CLR exception - code e0434f4d (first chance)
(1e2c.738): CLR exception - code e0434f4d (first chance)
(1e2c.738): CLR exception - code e0434f4d (first chance)
(1e2c.738): CLR exception - code e0434f4d (!!! second chance !!!)
eax=0025e034 ebx=e0434f4d ecx=00000001 edx=00000000 esi=0025e0bc edi=002d66d8
eip=75acb4f4 esp=0025e034 ebp=0025e084 iopl=0         nv up ei pl nz ac po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000212
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Windows\system32\KERNELBASE.dll - 
KERNELBASE!RaiseException+0x54:
75acb4f4 c9              leave
Foi útil?

Solução

Você precisa fornecer mais informações. Qual é a exceção? Pode ser que um tipo esteja sendo referenciado em tempo de execução que não pode ser resolvido. Se o código não estiver sendo usado, o otimizador poderá omitê -lo do JIT, enquanto no modo de depuração pode estar acionando uma exceção de carga de tipo. Quem sabe embora. Sem mais informações, seria impossível dizer.

editar Em resposta à atualização da sua pergunta, parece que há um tipo chamado Main que está lançando uma exceção em seu construtor de instância ou construtor estático. Também pode ser um inicializador de campo que está desencadeando isso. Se você puder capturar a exceção, verifique sua innerexception que o TargetInvocationExceptions geralmente contêm. Isso lhe dará mais informações.

editar Você indicou que a exceção interna é um problema de carregamento de montagem que é o que eu imaginei inicialmente. Então você está perdendo uma referência em algum lugar. Em particular, você provavelmente está referindo uma DLL que, por sua vez, faz referência a outra DLL que não pode ser localizada. Você precisará descobrir qual montagem não pode ser resolvida. Você pode usar o fuslogvw.exe ferramenta para visualizar erros de ligação de montagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top