调试dll有什么好办法?

尼克徐 发布于 2014年03月12日
无人欣赏。

我们在vc6.0环境下(为了兼容以前的项目,只好采用这个版本),用c语言做了一个的计算引擎,编译成dll,用java调用。有时会出crash,就需要查bug在哪里。
请问这种情况下调试dll有什么好办法?我现在调试时是跑java的程序来调用dll,在c里用printf来输出,但无法断点调试什么的。

共8条回复
tinyfool 回复于 2014年03月12日

你用VC调用的话,是可以调试的啊,把项目执行的地方写上java的执行的命令行语句就可以了吧

尼克徐 回复于 2014年03月12日

好的,谢谢!我也正看这方面网页。

RolandXu 回复于 2014年03月12日
  • 调试器和开发环境是两回事,你可以用VC6.0做开发,但是用VS2012来调试,这没任何问题。
  • 如果要调试crash的话,可以把你的调试器注册为post-mortem debugger, 这样子当crash发生的时候,调试器会被自动加载起来。比如说这里
  • 如果你能够确定你的dll在那个exe里面运行的话,可以在exe启动以后,在VS里面Tools->Attach to Process来调试你的dll
  • 如果你不知道你的dll运行在那个exe里面的话,用tasklist /M打印出所有的exe和他们加载的dll.
tinyfool 回复于 2014年03月12日

3楼 @RolandXu

尼克徐 回复于 2014年03月12日

3楼 @RolandXu 多谢!我现在已经可以在dll里断点执行了,但是无法看到printf的信息,请问为什么?

尼克徐 回复于 2014年03月12日

要疯掉了,在debug mode下编译的dll不会crash,但在release mode下编译的dll会crash!
大侠们有啥妙招啊...

RolandXu 回复于 2014年03月12日

6楼 @尼克徐 printf没法看到是因为没有一个标准输出的窗口,可以使用OutputDebugString函数 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx
然后在VS里面的output窗口看输出。

release下会crash,八成是就是使用未初始化的变量。release mode由于优化,调试器里面的数据并不可信,如果能过懂一些编译原理以及汇编代码的话,调试也不难。就你的情况,只有用OutputDebugString把怀疑东西都一个一个打印出来咯

尼克徐 回复于 2014年03月12日

7楼 @RolandXu 多谢了!我明早调试一下看。
今晚跑步去喽。锻炼一下。

登录 或者 注册