从makefile到调试dll
来源:互联网 发布:手机硬币魔术软件 编辑:程序博客网 时间:2024/05/18 01:24
最近在opensc上下了一个pkcs11的实现。代码真多,不过调理挺清晰,设计蛮合理的。但是这个工程是makefile生成的,想调试一下都没思路。因此在google上搜略了一番,发现没有相似的问题。自己解决吧。主要是解决两个问题,使用makefile生成调试版的dll,并且生成完整的调试信息;使用vs在源码级别上调试这个dll。
问题一:
在http://blog.csdn.net/dyc13/archive/2006/09/01/1154871.aspx和http://hi.baidu.com/bidepan2023/blog/item/29112e1bcbc3141f8618bff9.html两个博客上翻看了vs的编译选项和链接选项后。发现生成调试版的dll和生成调试信息是两件独立的事情。而且只有这两种东西都存在时才能进行正确的调试。而生成完整的调试信息需要编译选项/Zi,生成调试版dll需要指定链接选项的/debug选项。因此在makefile中添加这两个选项即可。
下面是个完整的makefile,这个makefile生成调试版dll并且生成完整的调试信息。假定三个文件,hello.cpp num.cpp num.h.文件内容如下:
// hello.cpp
#include "NUM.h"
#include <stdio.h>
void print()
{
#ifdef HAVE_CONFIG_H
printf("define\n");
#else
printf("not define\n");
#endif
__asm int 3;
show();
}
// num.cpp
#include <stdio.h>
void show()
{
printf("show\n");
}
// num.h
#pragma once
void show();
// ex.def
EXPORTS
makefile文件如下:
// makekfile
OPTS = /c /Zi /DHAVE_CONFIG_H
LINKF = /debug
all :hello.dll
hello.dll : hello.obj NUM.obj
link $(LINKF) /dll /def:ex.def hello.obj NUM.obj /out:hello.dll
hello.obj : num.h
cl $(OPTS) hello.cpp
NUM.obj : num.h
cl $(OPTS) NUM.cpp
使用vs2008的命令行编译即可得到正确的结果。命令行为nmake -f makefile.mak.
在makefile中/DHAVE_CONFIG_H的意思预定义HAVE_CONFIG_H这个宏。
问题二:
生成正确的dll后,下一步就应该是创建一个exe使用对这个dll进行源码级调试了。在vc6上找了半天选项都没有找到相应
的选项,被迫使用vs2008。很快就找到了。使用方法如下:
在工具--->选项--->调试--->符号 中添加生成的pdb文件或者其目录即可。
进行这样一个简单的设置就解决了问题。此时,就可以顺利的进行源码的调试了。其中pdb文件是连接源码和exe的一个桥梁。而且pdb,源码,exe有一定的关联。vs2008可以正确的关联它们。这一点使我们大批量引入pdb文件变得非常方便。
搞了一下午才搞出来,真不容易,哈哈。像我这么缺乏决断能力的人能走到最后,觉得自己成功了。
- 从makefile到调试dll
- 从autoscan到Makefile
- 从GCC到makefile
- 从makefile到CMake
- 从 C++ 到 DLL 再到 COM
- 如何:从 DLL 项目进行调试
- Makefile语法详解 - 从入门到精通
- C#调试DLL, 定位到源码
- 从 dll 到 so 之路
- Makefile 调试
- makefile调试
- makefile调试
- 调试makefile
- 调试makefile
- 调试makefile
- makefile调试
- makefile调试
- Genymotion 从注册到安装到运行到调试
- 一副对联
- 【访谈转摘】毕建勋作品:来自结构深处的画面张力
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
- InnoDB数据库存储引擎
- 生成Excel 输出到浏览器
- 从makefile到调试dll
- 二次绑定(重新绑定)控件的DataSource
- maven 配置 struts2 hibernate3 spring2 的时候出现的问题
- MySQL数据库存储引擎
- linux and ubuntu学习网址收集
- spring常见异常
- MySQL数据库存储引擎详解
- MakeFile
- Microsoft Expression Studio 4 Ultimate SP2 简体中文版