我的设置如下:
和Photran
环境:1.6.0_21
(内部版本17.0-b17,混合模式)
我最初的测试Fortran应用程序仅打印“Hello World!”。然后退出。
尽管在Eclipse的“问题”选项卡中具有以下2条警告,但代码仍可以构建并正常运行
Description Resource Path Location Type
Error launching external scanner info generator (gcc -E -P -v -dD C:/Users/Joe/workspace/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c) HelloFortran Unknown C/C++ Problem
Error launching external scanner info generator (gcc -E -P -v -dD C:/Users/Joe/workspace/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c) HelloFortran Unknown C/C++ Problem
尝试将应用程序调试为本地Fortran应用程序时出现问题,导致此错误:
cygwin warning:
MS-DOS style path detected: C:\Users\Joe\workspace\HelloFortran
Preferred POSIX equivalent is: /cygdrive/c/Users/Joe/workspace/HelloFortran
.gdbinit: No such file or directory.
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
auto-solib-add on
Undefined command: "auto-solib-add". Try "help".
Error: dll starting at 0x76ba0000 not found.
Error: dll starting at 0x75230000 not found.
Error: dll starting at 0x76ba0000 not found.
Error: dll starting at 0x76aa0000 not found.
[New thread 7060.0x10dc]
[New thread 7060.0x16c0]
我猜找不到入口点,因为它期望使用32位/64位DLL并获取其他类型(如果我输入错了,请更正我)。 GDB版本如下:
GNU gdb 6.8.20080328 (cygwin-special)
GDB configured as "i686-pc-cygwin"
从命令行运行GDB可以得到:
[New thread 5768.0x15a0]
Error: dll starting at 0x76ba0000 not found.
Error: dll starting at 0x75230000 not found.
Error: dll starting at 0x76ba0000 not found.
Error: dll starting at 0x76aa0000 not found.
[New thread 5768.0x46c]
hellofortran () at ../HelloFortran.f90:1
1 program HelloFortran
Current language: auto; currently fortran
如果我正确地阅读了该应用程序的确可以在GDB中运行并且可以逐步执行它,但是丢失的DLL错误是什么呢?
Dependency Walker为我的HelloFortran.exe提供了以下错误
Error: Modules with different CPU types were found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
缺少的DLL似乎是IESHIMS.DLL(2),根据我的快速研究,这似乎不是一个大问题,但是我看不出我的应用程序需要引用此DLL的任何原因,因此我认为这不是导致GDB中的错误。
所有模块的CPU类型均为x64,除了:
CYGGCC_S-1.DLL
CYGGFORTRAN-3.DLL
CYGWIN1.DLL
HELLOFORTRAN.EXE
CPU类型为x86
我担心缺少的DLL错误可能会损害我正确调试程序的能力(尽管该程序最终将在基于Unix的HPC上运行,所以我不应该在这里遇到这些问题,因为所有这些DLL似乎都与Cygwin)。
我的问题:
可以继续,还是应该解决
丢失的DLL错误(如果这样,
如何)?
编辑:我的测试程序如下:
program HelloFortran
! Force variable declaration
implicit none
! Print 'Hello World!' to the main output
write (*,*) 'Hello World!'
! End program
end program HelloFortran
最佳答案
当Win/x64向该过程的一部分的64位DLL发送DebugEvent
到32位进程时,它必然会截断加载地址(64位加载地址不适合32位LPVOID
)。最终结果是调试器看到DLL加载事件,但是在该地址找不到任何DLL。所以警告你。
否:这是在x64上调试任何32位进程(至少使用32位调试器)的基础。我认为如果使用x64版本的GDB,您会摆脱警告,但是我不确定GDB/x64是否可以在Windows上调试32位进程(x86_64 GDB对于Linux上的i386进程没有问题,原因是“拱”支持;我不知道Windows版本中是否存在“多拱”。
你不应该这样
是什么让您认为它是IESHIMS.DLL
?
您更有可能看到WoW64.dll和 friend 。
在Win/x64上运行的每个32位应用程序都引用WoW64
。
关于windows - 为什么在Windows 7 64位(使用Eclipse/Photran/Cygwin)上使用GDB调试Fortran代码时会丢失DLL错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3982194/