Fortran Coder

查看: 15739|回复: 13
打印 上一主题 下一主题

[调试器] vb6.0下如何调试Fortran的dll?

[复制链接]

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
跳转到指定楼层
楼主
发表于 2017-3-31 10:35:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题,我用Fortran编写了一个动态链接库,用vb6.0来调用,已经能够成功调用。
现在我想逐句调试dll,但是不知道应该怎么设置? 我搜索网上的教程,是关于vc的,如下面两张图。但是我找不到教程里说的“可执行文件栏”?


1.jpg (29.08 KB, 下载次数: 490)

1.jpg

2.jpg (36.4 KB, 下载次数: 489)

2.jpg
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

796

帖子

2

主题

0

精华

大宗师

F 币
3787 元
贡献
2266 点
沙发
发表于 2017-3-31 11:09:51 | 只看该作者
如果是release的dll,不能调试。最简单的办法,把vb里面的参数提取出来,在fortran里面调试。

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
板凳
 楼主| 发表于 2017-3-31 18:16:49 | 只看该作者
li913 发表于 2017-3-31 11:09
如果是release的dll,不能调试。最简单的办法,把vb里面的参数提取出来,在fortran里面调试。 ...

您好,我的dll是debug的。请问什么叫“把vb里面的参数提取出来,在fortran里面调试”呢?

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1341 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2017-3-31 18:19:14 | 只看该作者
就是 command(命令)
command arguments(命令行参数)
working directory (工作路径)
这三个。

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
5#
 楼主| 发表于 2017-4-6 15:29:49 | 只看该作者
我在“Command Arguments”里输入了dll所需的命令行参数,但是Debug的时候报错如下:

我想这是因为我没有填写“Command”导致的。我看了如下的提问(https://software.intel.com/en-us ... indows/topic/287867),感觉“Command”一栏应该是需要填入启动项目的exe,但是我这个只有dll,没有启动项目exe,填不了啊?

请问应该怎么做才能调试呢?

a.jpg (48.93 KB, 下载次数: 415)

a.jpg

2.jpg (9.93 KB, 下载次数: 443)

2.jpg

3.jpg (29.13 KB, 下载次数: 437)

3.jpg

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
6#
发表于 2017-4-6 18:37:11 | 只看该作者
你有两种方法调试:
第一种:
1. 在 Command (而不是 command arguments)里写上 VB 编译出来的 exe 所在的路径。(需要确保它使用的 DLL 是你编译出来的,而不是编译出来后又拷走到其他文件夹的)
2. 在dll对外函数的开始处下断点, 直接启动调试。当VB程序调用 dll 函数时,会自动断下来。

插一句问,DLL运行需要命令行参数吗?怎么听不懂你说什么。截图能不打码吗?

第二种:
1.运行 VB 程序。但不要点击按钮,使之暂时不要调用 fortran dll 的函数。
2.打开 VS,并打开 dll 工程,用 调试,附加到进程... 功能,选择本地 VB 的 exe 进程,并附加。
3.在dll对外函数的开始处下断点,点击 VB 程序上的按钮,使之调用 fortran dll 函数。此时会断下来。

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
7#
 楼主| 发表于 2017-4-6 20:13:38 | 只看该作者
谢谢大神的回答!    我去试试看。
关于您的提问:(1)DLL的命令行参数,想了一下,我是和运行exe程序时的命令行参数搞混了;把传入DLL的实参认为是“命令行参数”;(2)打码问题:我的命令行参数里填了一个路径名,而我路径名取得比较详细,有个人信息,所以在互联网上就打码了...

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
8#
 楼主| 发表于 2017-4-6 22:45:58 | 只看该作者
vvt 发表于 2017-4-6 18:37
你有两种方法调试:
第一种:
1. 在 Command (而不是 command arguments)里写上 VB 编译出来的 exe 所在 ...

您好,我想针对方法1提个问题:
vb的程序运行的时候没有exe产生的,请问我是要先“文件”——“生成工程”,再将这个exe的路径加在vs里吗?如下图。
但是程序似乎直接运行完了,没有在断点的地方暂停(按了逐语句F8,就直接从“Call suba(a, b, c)”跳到“Text1.Text = c”了,没有进入dll)。

我用来测试的vb主程序如下:
[Visual Basic] 纯文本查看 复制代码
Private Declare Sub suba Lib "D:\try_vb\c_dll\Dll1\Dll1\Debug\Dll1.dll" (ByRef a As Single, ByRef b As Single, ByRef c As Single)
Private Sub Command1_Click()
        Dim a As Single
        Dim b As Single
        Dim c As Single
        a = 10#
        b = 2#
        Call suba(a, b, c)
        Text1.Text = c
End Sub


Fortran的DLL程序如下:
[Fortran] 纯文本查看 复制代码
    subroutine suba(a,b,c)
    !DEC$ ATTRIBUTES stdcall,DLLEXPORT ::suba
    !DEC$ ATTRIBUTES ALIAS:"suba"::suba
    !DEC$ ATTRIBUTES reference :: a,b,c

        implicit none
        real::a
        real::b
        real::c

        c=a+b

    end subroutine


1.jpg (20.12 KB, 下载次数: 461)

1.jpg

2.jpg (46.46 KB, 下载次数: 432)

2.jpg

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
9#
发表于 2017-4-7 07:40:54 | 只看该作者
本帖最后由 vvt 于 2017-4-7 07:42 编辑

1. 传入DLL的参数和命令行参数不是一回事。(前者是内存里的各种数据类型,乃至巨量的数组。而后者只能是字符串,并且不允许超过一定的字节数)
2. VB 我其实不了解的。我是用 Qt/C++ 调用fortran的dll。但是原理应该是一样的。
3. 是的,需要先在 VB 里生成 exe,再添加到 Dll 的工程配置的 Command 里。
4. 添加后,请启动 Dll 工程(VS)的开始调试(而不是VB的调试)。断点下在 fortran 的代码 c=a+b
5. 你用方法二可以调试吗?

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
10#
 楼主| 发表于 2017-4-7 11:06:28 | 只看该作者
vvt 发表于 2017-4-7 07:40
1. 传入DLL的参数和命令行参数不是一回事。(前者是内存里的各种数据类型,乃至巨量的数组。而后者只能是字 ...

方法一(基本成功):原来我问题出在“启动了VB的调试;而不是VS里DLL的调试”。
现在可以调试DLL了,但是出现一个小问题(无伤大雅):
调试开始后,会出现如图1的窗口(“dll 无法找到exe的调试信息或者调试信息不匹配”)。点击“是”之后,会出现vb的主程序窗口,如图2,此时的断点是空心的。
但当点击vb窗体的“运行”按钮调用DLL后,就正常进入DLL代码了,断点也变成实心的了,如图3。
感觉好神奇

方法2(未成功):
我在VS里附加了vb的exe,如图4,但是点击vb上的“运行”按钮后,程序就直接出结果了,没有停在断点处,如图5。

1.jpg (14.36 KB, 下载次数: 477)

1.jpg

2.jpg (36.69 KB, 下载次数: 440)

2.jpg

3.jpg (3.18 KB, 下载次数: 484)

3.jpg

4.jpg (75.45 KB, 下载次数: 471)

4.jpg

5.jpg (25.61 KB, 下载次数: 446)

5.jpg
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-23 22:52

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表