【问题标题】:Debugging a shell extension in release mode在发布模式下调试 shell 扩展
【发布时间】:2012-08-27 15:10:38
【问题描述】:

我有一个在发布模式下构建的 shell 扩展,我还生成调试符号和 .pdb 文件。我将构建上下文菜单扩展 .dll 文件的 Visual Studio 程序附加到正在运行的 explorer.exe 进程,我可以在输出窗口中看到程序附加了 explorer 进程事件,如下所示:

'explorer.exe': Unloaded 'C:\Windows\System32\mydocs.dll'
'explorer.exe': Unloaded 'C:\Windows\System32\sendmail.dll'
'explorer.exe': Unloaded 'C:\Windows\System32\zipfldr.dll'
The thread 'Win32 Thread' (0x16d8) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1650) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1070) has exited with code 0 (0x0).

但它永远不会到达我在函数 Initialize 中设置的断点(形成继承和实现 IshellExtInit 类的类)。当我右键单击文件时,右键单击菜单会使用自定义上下文菜单初始化并执行所需的操作,但不涉及断点! 我想知道如何调试,因为我正在尝试为回收站注册上下文菜单并且它不起作用,我想看看代码发生了什么。 可在此帖子中找到注册回收站的代码: recycle bin registration

【问题讨论】:

  • 调试发布版本是出了名的不准确,即使使用符号也没有太大改进。你可以试试windbg、ida或VS的汇编模式;那些会注意断点,但你显然是在汇编中工作。
  • 同意。虽然如果您启用符号并从发布版本中删除所有优化,您可能能够使用它的限制。
  • 如果我在调试模式下构建,我得到这个:错误 PRJ0019: A tool returned an error code from "Performing registration" 。我以管理员身份运行 VS。
  • 您的自定义构建步骤错误,请检查调试配置中的设置。

标签: c++ windows visual-c++ mfc windows-shell


【解决方案1】:

尝试使用 regsvr32 手动注册您的调试版本,例如

regsvr32 mydocs.dll

您可能必须终止 Explorer 才能使其识别注册表更改。

如果这不起作用,您可以尝试在您的扩展程序中抛出一个消息框,看看这是否会使 Explorer 停止足够长的时间以便您调试您的扩展程序。

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 2011-09-02
    • 2010-11-17
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多