你在这里
调试ABAQUS的标准用户子例程
你好,
我设法找到了一步一步调试UMAT的方法。我在ABAQUS 6.9上使用英特尔fortran 11.0测试了它,它与运行在win7 /x64上的Visual Studio 2005或2008集成在一起。对于其他版本和其他用户子例程,该过程是相同的(相同的过程也应该在linux中工作,但使用不同的调试器)。
整个思想是将“ABAQUS标准”流程附加到调试器。为此,必须在调试模式下编译并链接UMAT代码。
因此,您应该编译您的用户子例程文件,就像您想要创建一个exe控制台应用程序一样,不要注意最后一个链接器错误,即您的文件不包含主子例程。在这里,在运行abaqus作业时使用预编译的obj文件而不是原始的fortran文件要容易得多(因为调试信息文件是在固定位置创建的,而不是在abaqus每次在不同文件夹中创建的临时文件夹中)。
为了在调试模式下创建目标文件,我使用了这样一个命令(你可能需要根据VS的路径稍微修改一下):
ifort /nologo /debug:full /Od /根-interfaces /warn:interfaces /module:"compiled\modules\\" /object:"compiled\\" /traceback /check:bounds /libs:static /threads /dbglibs /Qvc8 /Qlocation,link,"c:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\amd64" "Umat-Test.f90"
在我的文件夹中,我说编译器在“compiled\modules”中创建模块文件,在这个文件夹中创建目标文件:“compiled”。你可能有你自己的。通过运行这个命令,链接器还创建了调试所需的文件,这(在MS-VS中)是一个扩展名为pdb的文件。
编译完成后,您可以找到“Umat-Test”文件。Pdb”和你的FORTRAN文件在同一个文件夹。
我应该说,Abaqus将每个创建的obj文件链接到“standardud .dll”文件,该文件在提交每个作业后重新创建。该文件是abaqus_v6中链接器命令的主要输出。env文件,由Abaqus加载。因此,您必须修改链接器命令以在调试模式下创建它。为此,我从主abaqus_v6中复制了link_sl和link_exe。Env文件,并把它放在我的用户级别abaqus_v6。env文件。然后我在原来的命令中添加了switch /debug:full。你的命令应该是这样的:
link_sl='cmd /c "LINK /nologo /debug:full /INCREMENTAL:NO /subsystem:console /machine:AMD64 /NODEFAULTLIB:LIBC. "LIB / NODEFAULTLIB: LIBCMT。LIB / DEFAULTLIB: OLDNAMES。LIB / DEFAULTLIB: LIBIFCOREMD。LIB / DEFAULTLIB: LIBIFPORTMD。LIB / DEFAULTLIB: LIBMMD。LIB / DEFAULTLIB: MSVCRT。LIB / DEFAULTLIB: kernel32。lib / DEFAULTLIB: user32。lib / DEFAULTLIB: advapi32。lib /FIXED:NO /dll /def:%E /out:%U %F %A %B oldnames。自由user32。自由ws2_32。自由netapi32。自由advapi32。lib && mt /manifest %U;manifest /outputresource:%U;2 && del %U.manifest"'
link_exe='cmd /c "LINK /nologo /debug:full /INCREMENTAL:NO /subsystem:console /machine:AMD64 /NODEFAULTLIB:LIBC。LIB / NODEFAULTLIB: LIBCMT。LIB / DEFAULTLIB: OLDNAMES。LIB / DEFAULTLIB: LIBIFCOREMD。LIB / DEFAULTLIB: LIBIFPORTMD。LIB / DEFAULTLIB: LIBMMD。LIB / DEFAULTLIB: MSVCRT。LIB / DEFAULTLIB: kernel32。lib / DEFAULTLIB: user32。lib / DEFAULTLIB: advapi32。lib /FIXED:NO /LARGEADDRESSAWARE /out:%J %F %M %L %B %O oldnames。自由user32。自由ws2_32。自由netapi32。自由advapi32。lib && mt /manifest %J。manifest /outputresource:%J;1 && del %J.manifest"'
然后设置就准备好了。转到VS,创建fortarn项目,并将fortran源代码文件添加到项目中。请记住,在调试时编译的文件必须与代码匹配。
然后转到工具- >选项- >调试- >符号,将pdb文件的路径添加到“符号文件(.pdb)位置”部分。
这些程序只需要做一次。
现在提交作业,等待一段时间,在进程列表中看到Standard.exe(例如使用win的任务管理器),然后切换到VS并转到调试->附加到进程.
从正在运行的进程列表中选择standard.exe。如果您完美地完成了所有步骤,VS将成功地从pdb文件加载调试符号,您必须能够一行一行地调试代码,就像我做的那样。
这里有一些有用的提示:放置一个一次性的延迟命令(比如sleep)来争取一些时间切换到VS环境,并将调试器附加到进程(standard.exe)。你可以把断点放在这条线后面。如果你在完成这些步骤时有困难,你可以给我发电子邮件。
下面是将进程附加到调试器后的截图:
解释:在我上面的代码中,InitializationDone是一个常见的变量,我使用它在10秒睡眠后捕获进程。
这里有一个简单的示例,你可以尝试(Umat-Test.f90):
子程序UMAT(stress,statev,ddsdde,sse,spd,scd,rpl, ddsddt, drplde, drpldt, &
stran, dstran、时间dtime、临时dtemp, predef, dpr, cmname, ndi, nshr nten, nstatv, &
道具、nprops、坐标、drot pnewdt, celent dfgrd0, dfgrd1,诺埃尔,不扩散核武器条约》,层,kspt, kstep kinc)
包括“aba_param.inc”
整数:nTestNum
nTestNum = 0
!等待10秒
调用睡眠(10)
!把你的断点放在这里:
nTestNum = nTestNum + 1
!您可以使用add watch来检查这些值。享受吧!
返回
结束子程序umat
--
欢呼,
Hamidreza,
- 哈米德。Mirkhani的博客
- 登录或注册发表评manbetx体育论
- 25038年读
评论
你能上传一份完整的吗
你可以上传一个完整的版本,我们是更新的子调试。
你好,我正在跟上
你好,我正试图按照你描述的步骤,但我有一些困难。第一个:我没有看到任何。pdb扩展文件在我的fortran文件。第二:我没有在调试>中找到任何standard.exe附加到进程部分。你能给我一些建议吗?
谢谢,
伊姆兰
Linux调试器
嗨,这是windows系统,但是对于linux我们该怎么做呢?
谢谢。
长
VUMAT中的调试问题
先生哈米德。Mirkhani你能告诉我如何在visual studio中获得standard.exe编译器,因为它在“调试>>附加到进程”中丢失了吗??