CopyFile() 函数在调试时导致异常,但在来自终端的 运行 时不会
CopyFile() function causes exception while debugging but not while running from terminal
我有一个Visual Studio 2019项目,只包含一个.cpp文件,命名为copyFile.cpp
#undef UNICODE
#include <iostream>
#include <Windows.h>
int main()
{
std::cout << "Hello World!\n";
DWORD ret = CopyFile("xyz.txt", "xyzCopy.txt", FALSE);
printf("\n\t ret: %d, getlasterror(): %d", ret, GetLastError());
return 0;
}
调试代码时出现问题,跨过这一行:
DWORD ret = CopyFile("xyz.txt", "xyzCopy.txt", FALSE);
导致抛出异常。
Exception thrown at 0x76E4B1AF (combase.dll) in copyFile.exe : 0xC0000005: Access violation reading location 0x00000008
然后程序中断。
与此同时,正在创建 xyzCopy.txt
,具有全新的修改日期但作为空文件,0 KB。
另一方面,如果我 运行 通过终端 ./copyFile.exe
.exe,则不会抛出异常,并且代码会继续执行到以下行。正在创建文件xyzCopy.txt
,内容已满(非空),但创建时间戳与原始文件相同。调试时对比案例
此外,如果CopyFile()
失败,例如因为无法找到要复制的源文件,调试工作正常。因此,仅当 CopyFile()
成功时才会出现问题。
我不知道是怎么回事。感谢您的帮助。
我找不到根本原因,但是,@SimonMourier 在他的评论中发布了一个 link,这表明一个可行的解决方法。
Additional information: Toggling the debug option "Automatically close
the console when debugging stops" on, stops the exception being
thrown.
我有一个Visual Studio 2019项目,只包含一个.cpp文件,命名为copyFile.cpp
#undef UNICODE
#include <iostream>
#include <Windows.h>
int main()
{
std::cout << "Hello World!\n";
DWORD ret = CopyFile("xyz.txt", "xyzCopy.txt", FALSE);
printf("\n\t ret: %d, getlasterror(): %d", ret, GetLastError());
return 0;
}
调试代码时出现问题,跨过这一行:
DWORD ret = CopyFile("xyz.txt", "xyzCopy.txt", FALSE);
导致抛出异常。
Exception thrown at 0x76E4B1AF (combase.dll) in copyFile.exe : 0xC0000005: Access violation reading location 0x00000008
然后程序中断。
与此同时,正在创建 xyzCopy.txt
,具有全新的修改日期但作为空文件,0 KB。
另一方面,如果我 运行 通过终端 ./copyFile.exe
.exe,则不会抛出异常,并且代码会继续执行到以下行。正在创建文件xyzCopy.txt
,内容已满(非空),但创建时间戳与原始文件相同。调试时对比案例
此外,如果CopyFile()
失败,例如因为无法找到要复制的源文件,调试工作正常。因此,仅当 CopyFile()
成功时才会出现问题。
我不知道是怎么回事。感谢您的帮助。
我找不到根本原因,但是,@SimonMourier 在他的评论中发布了一个 link,这表明一个可行的解决方法。
Additional information: Toggling the debug option "Automatically close the console when debugging stops" on, stops the exception being thrown.