调试DLL断点进不去


A.exe项目 和B.DLL项目  a程序反射调用DLL,在b.DLL中下断点提示“还没有为该文档加载任何符号”,查询资料的各种方法都试了,都不行。

使用 Visual Studio 的“生成”菜单中的“生成解决方案”选项来生成 B.DLL 的调试符号文件。要是已经建立了符号文件还遇到此错误,检查 A.exe 和 B.DLL 的版本是否匹配。

检查一下调试器的设置,“选项”->“调试”->“符号”;
检查生成符号文件,“项目属性”->“生成”->“调试信息格式”中选择“程序数据库(/Zi)”,并勾选“生成程序数据库文件”;
手动加载符号文件,“调试”菜单中选择“Windows”->“模块”窗口,在B.DLL模块上右键选择“加载符号文件”;
或者直接重新生成解决方案试试。
 
如果答案对您有所帮助,望采纳。

引用new bing部分回答作答:
在使用反射调用DLL时,在B.DLL中下断点可能会遇到符号加载问题。这通常是由于符号未被加载到调试器中引起的。

以下是一些可能解决此问题的方法:

1 确保B.DLL已被编译为调试版本,以便符号文件(.pdb)生成。

2 将符号文件(.pdb)与B.DLL放在同一目录下。

3 确保A.exe和B.DLL使用的是同一个平台(32位或64位)的代码。如果它们不一致,则可能无法正确加载符号文件。

4 确保调试器的符号路径设置正确。在Visual Studio中,可以通过打开“工具”菜单中的“选项”对话框,然后在“调试”选项卡中的“符号”部分中设置符号路径。

5 尝试清除B.DLL项目的临时文件和重新生成B.DLL以确保符号文件已正确生成。

6 如果上述方法都无法解决问题,可以尝试使用其他调试工具来调试B.DLL,如WinDbg或IDA Pro。

希望这些方法能帮助您解决问题。如果仍然存在问题,请提供更多的详细信息,例如使用的开发工具和环境,以便更好地帮助您解决问题。

这个问题是由于DLL调试信息丢失所导致的。有几个常见的解决方法:

  1. 生成PDB文件并和DLL在同一目录下

将DLL项目的调试信息生成PDB文件,并确保PDB文件和DLL在同一目录下,Visual Studio就可以找到调试信息而正常下断点。

  1. 将DLL以“动态链接库项目”而不是“类库项目”打开

如果DLL是以“类库项目”生成的,调试信息可能会丢失。 should 以“动态链接库项目”打开DLL解决方案,清除解决方案,重建,这时生成的DLL带完整调试信息,断点可以正常下。

  1. 选择DLL项目,菜单 Debug -> Attach to Process 选择A.exe进程

这时就可以直接在DLL上下断点调试,无需重新生成DLL。

  1. 右键选择DLL文件,属性 -> 调试 -> 启用调试信息

这会在DLL上启用调试信息,然后重启Visual Studio,断点就可以正常使用。

  1. 选择a.exe进程, 菜单 Debug-> 添加符号,选择DLL文件

这会将DLL的调试信息手动加载到a.exe进程,使得可以在DLL上下断点。

  1. 检查DLL和a.exe是否是匹配的平台和配置

如果DLL是Release生成,而a.exe是Debug,也会导致调试信息丢失,无法下断点。应确保两者的平台、配置相同。

  1. a.exe和DLL使用相同的Visual Studio开发,相同的开发人员目录

如果使用不同的开发人员进行开发和编译,由于开发人员目录不同,也可能会导致调试信息无法找到。

以上方法可以尝试使用,应该可以解决大多数DLL无法下断点的问题。首先推荐方法1、2、3,把DLL调试信息弄全,这是解决问题的关键。

希望这个回答能对您有所帮助。有任何其他问题,欢迎在评论中提出。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1023103
  • 这篇博客也不错, 你可以看下DLL制作和调用
  • 除此之外, 这篇博客: C语言接口的封装和设计专题中的 调试DLL程序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Microsoft 的VC++是开发和测试DLL 的有效工具,只需从DLL项目中运行调试程序即可。当你第一次这样操作时,调试程序会向你询问EXE文件的路径。此后每次在调试程序中运行DLL时,调试 程序会自动加载该EXE文件。然后该EXE文件用上面的搜索序列发现DLL文件,这意味着你必须设置Path环境变量让其包含DLL文件的磁盘路径,或者 也可以将DLL文件拷贝到搜索序列中的目录路径下。

  • 您还可以看一下 汤燕老师的微信小程序制作简易挂号系统课程中的 008-引入相关的类和dll文件小节, 巩固相关知识点

可以借鉴下

VS2010的项目,使用VS2013打开,断点提示“当前不会命中断点。源代码与原始版本不同”

四种解决方法:

Method 1. 按照错误提示,设置“工具”-“选项”-“调试”-“要求源文件与原始版本完全匹配”的勾选去掉;

Method 2. 使用VS2013重新编译工程

Method3. 重新格式化代码

Method4. 将源码用notepad打开,另存为Unicode,覆盖源文件


基于ChatGPT4与博主叶秋学长的回答,望采纳!!!有其他问题也可以询问我哦💕:
无法在DLL中设置断点的问题可能是由多种原因导致的。以下是一些建议和解决方案,希望对您有所帮助:

确保生成调试信息:在B.DLL项目的属性中,确保在构建选项卡中为调试配置生成调试信息。然后,在A.exe项目中,确保引用最新版本的B.DLL。

清理并重新生成解决方案:尝试清理整个解决方案,并重新生成A.exe和B.DLL项目。这有助于确保您使用的是最新的二进制文件和符号文件。

手动加载符号文件:在Visual Studio中,打开“调试”菜单,选择“窗口”>“模块”。找到B.DLL,右键单击它,然后选择“加载符号”。如果需要,可以手动浏览到.pdb文件的位置。加载符号后,您应该可以在B.DLL中设置断点了。

以管理员身份运行Visual Studio:有时,权限问题可能会导致无法加载符号。尝试以管理员身份运行Visual Studio,然后加载解决方案,看看是否可以设置断点。

调试选项:在Visual Studio中,打开“工具”>“选项”>“调试”,确保勾选“启用本机代码调试”和“启用.NET Framework源代码调试”。

调整项目属性:对于B.DLL项目,右键单击项目,然后选择“属性”。转到“生成”选项卡,确保选择了“生成调试信息”以及“输出路径”指向正确的位置。对于A.exe项目,请确保引用了正确版本的B.DLL。

检查代码优化设置:在B.DLL项目属性的“生成”选项卡中,确保未勾选“优化代码”选项。编译器优化可能会导致某些断点无法命中。

确保启动调试会话:确保您已经启动了一个调试会话(例如,按下F5运行项目),而不是仅仅运行项目(例如,按下Ctrl + F5)。断点只能在调试会话中命中。

尝试上述建议,希望其中至少有一个能够解决您的问题。如果问题仍然存在,请提供更多关于项目设置、代码结构和调试设置的详细信息,以便更好地诊断问题。

引用chatGPT作答,这个问题可能是由于符号加载问题引起的。在 Visual Studio 中,为了调试 DLL 中的代码,必须将其符号文件 (.pdb) 匹配到 DLL 文件上。

以下是一些可能会导致该错误的原因和解决方案:

1.确保在项目设置中启用了符号生成选项,以便在生成时生成符号文件。

2.确保 DLL 文件和符号文件都在调试器可以找到的路径下。最好的方法是将它们放在同一目录下,然后将该目录添加到调试器的符号路径中。

3.如果你已经构建了 DLL 文件和符号文件,并且仍然无法进入断点,那么尝试强制加载符号文件。可以使用调试器的“调试”菜单,选择“窗口”下的“模块”选项卡,然后右键单击 B.DLL 并选择“符号加载信息”。在弹出的对话框中,选择“指定符号文件位置”,并指定符号文件所在的路径。

4.如果你是在反射调用 DLL 时遇到了这个问题,那么你需要在 A.exe 中启用符号加载选项。这可以通过在 Visual Studio 中打开 A.exe 项目的属性,然后转到“调试”选项卡来完成。

希望这些解决方案可以帮助你解决问题。如果问题仍然存在,请提供更多的详细信息,以便更好地理解问题并给出更具体的建议。

先运行A.exe然后点到B.dll项目上选择附加到进程A.exe然后再调试一下呢!

这种情况一般是由于符号文件无法加载导致的。以下是一些可能的解决方法:

  1. 确认符号文件(.pdb)是否与二进制文件(.exe/.dll)在同一目录下,或者在符号搜索路径中。
  2. 确认在Visual Studio中设置了正确的符号文件路径和符号缓存路径。可以通过"工具"->"选项"->"调试"->"符号"来进行设置。
  3. 尝试清除并重新生成解决方案,以确保所有二进制文件及其相应的符号文件都已创建。
  4. 如果仍然无法调试,请尝试使用远程调试(如果您在本地开发时正在使用虚拟机或远程服务器)。

如果以上方法都无法解决问题,您可以尝试使用其他调试方法,例如输出日志信息,以便更好地定位问题。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个问题可能由以下几个原因导致:

  1. 编译器未生成符号信息。您需要按以下步骤重新编译您的DLL项目:
  • 在Visual Studio中打开DLL项目
  • 在顶部菜单上选择“Build” > “Configuration Manager”。
  • 在“Active Solution Configuration”下拉菜单中,选择“Debug”。
  • 选择您的DLL项目并确保“Build”选项框已勾选。
  • 单击“OK”以重新编译您的项目。
  1. 调试器无法加载DLL文件。请确保您的DLL文件存在于正确的目录中,并且未被其他进程占用。

  2. DLL文件未被正确链接到主程序中。请确保生成的A.exe项目能够正确链接到B.DLL文件。一种解决方法是将B.DLL文件复制到与A.exe文件相同的目录中。

以下是一个样例C++代码,说明在DLL项目中如何设置断点:

#include <iostream>

bool checkMyNumber(int number) {
    std::cout << "checkMyNumber: " << number << std::endl;
    return (number % 2 == 0);
}

extern "C" __declspec(dllexport) bool checkNumber(int number) {
    bool isEven = checkMyNumber(number);
    return isEven;
}

使用VS2019,可以设置如下的调试配置:

  1. 打开DLL项目的属性页面

  2. 选择“生成”选项卡,将“输出目录”更改为主程序的输出目录(比如A.exe)。这将确保在运行时,A.exe可以找到B.DLL。

  3. 选择“调试”选项卡,将可执行文件设置为A.exe,并在“命令行参数”中输入任何必要的参数。

  4. 在VS2019中启动调试器,选择“调试” > “附加到进程”,然后选择A.exe。请确保“绑定到”下拉列表框中选择了“调试这些代码类型”。

  5. 在B.DLL项目中设置断点,然后运行A.exe。您应该能够在Visual Studio中跟踪您的DLL代码。

希望这能帮助您解决问题。
如果我的回答解决了您的问题,请采纳!