我正在努力将Visual C++应用程序移植到GCC(应该建立在MingW和Linux上).
现有的代码__try { ... } __except(1) { ... }在几个地方使用块,所以几乎没有(可能没有内存类型错误?)会使程序退出而不做一些最小的日志记录.
与GCC做类似的事情有哪些选择?
编辑:感谢Visual Studio中指向/ EH选项的指针,我现在需要的是关于如何在Linux上处理信号的一些示例.我从2002年发现了这条消息.
还有什么其他信号SIGFPE,SIGSEVG我应该注意什么?(主要是关心可能从我做错的事情)
赏金信息:我希望我的应用程序能够在退出之前自动记录尽可能多的错误条件.
我可以得到什么信号,以后通常无法记录错误信息?(内存不足,还有什么?)
如何以可移植的方式处理异常和(最重要的)信号,使得代码至少在Linux和MingW上运行相同.#ifdef没问题.
我不仅仅有一个记录失败的包装进程的原因是出于性能原因我将一些数据保存到磁盘直到最后一分钟,所以如果出现问题我想尽可能多地尝试将数据写出来退出.
我有一个Visual Studio 2005 C++项目,它是一个控制台应用程序.
我想开始在测试工具下获取一些代码,但我遇到了一些我不知道如何最好地处理的问题.
我不希望我的大多数测试代码最终都在生产中的普通.exe中,所以我认为最好为我的测试创建一个单独的项目.第一个问题,这个新项目将如何调用其余的代码?我是否应该使用单个入口点将遗留代码设为.lib或.dll,并创建一个单独的项目来调用遗留代码的主要内容?
我是否应该把所有测试放在完全不#ifdef TESTING使代码不会出现在我的生产.exe 文件中的丑陋黑客?如果是这样,我应该如何有条件地加载我的测试框架?使用单独的属性配置进行测试?
我基本上正在寻找有关如何在Visual C++中获取遗留.exe项目的测试工具的任何建议
我在Visual Studio 2005中有大约50个项目,我正在构建一个新的开发机器,我想慢慢将这些项目移动到VS 2008,但也有2010年可用于选择新项目.
这可以吗?这种设置有什么问题吗?任何在同一系统上运行多个版本的Visual Studio的一般建议都将非常感激.特别是与管理项目到新版本的受控迁移有关,但能够有选择地保留一些旧版本.
visual-studio-2005 visual-studio-2008 visual-studio visual-studio-2010-rc
我遇到一个问题,ReadToEnd在尝试读取ASP.net网站中的16MB文本文件时抛出OutOfMemory异常.
在调查原因的时候,我遇到了File.ReadAllText,这正是我正在做的事情,我并不关心如何获取文本.
但是看看ReadAllText的文档,它没有提到OutOfMemory异常的可能性.这是为什么?它的实现方式与ReadToEnd的不同之处在于它不太可能耗尽内存,或者如果内存不足会引发其他异常吗?
编辑添加代码只是为了显示我目前正在做的事情:
StreamReader inputFile = System.IO.File.OpenText(filename);
string cacheData = inputFile.ReadToEnd();
inputFile.Close();
Run Code Online (Sandbox Code Playgroud)
有时我在第2行得到了OutOfMemory异常.没有进行解析,文件只有16M的文本,我知道并不奇怪.
重新启动IIS通常会修复它.但是当我收到错误时,我有2G的RAM可用,IIS可能会达到内部限制吗?w3wp.exe进程通常使用350-500M(这是Windows Server 2003上的IIS 6)
想象一下以下课程:
public class Settings
{
[FileBackedProperty("foo.txt")]
public string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够编写类似于上面的内容,并settings.Foo从文件"foo.txt"中读取并settings.Foo = "bar"写入"foo.txt".
显然这是一个简化的例子,我不会在生产应用程序中执行上述操作,但还有其他示例,例如,如果我希望Foo存储在ASP.net会话状态"foo"中,但我厌倦了编写以下内容代码一遍又一遍:
public int Foo
{
get
{
if (Session["foo"] != null)
return Convert.ToInt32(Session["foo"]);
else
// Throw an exception or return a default value
}
set
{
Session["foo"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
(再一次这个例子是简化的,我不会写上面的代码,实际上我在撒谎,我有上面的代码,我正在努力重构它,因此这个问题)
除非你有50个不同的会话值都具有相似的逻辑,否则上面的例子很好.那么我有可能将第二个属性转换为类似于第一个属性的东西吗?(使用属性和反射,或者其他一些方法?)
我有一个系统,我以字符串的形式提供日期和时间,例如"2011-03-13 03:05:00".我可能会在"2011-03-13 01:59:00"收到此字符串,我需要知道从现在到字符串中的时间之间的时间长度(由于DST更改,时间为6分钟).
我有代码解析字符串并创建一个tm结构,然后转换为time_twith mktime.问题是我必须tm_isdst在解析时间时手动设置标志,所以我正在寻找一种方法来检测是否tm_isdst应该设置.有任何想法吗?
我对如何处理那里有2个的情况下,2AMs这将是具体到我的应用程序的一些想法,但我仍然需要一种方式说"如果这个时间是当前系统时间,将DST生效?"
编辑:基于Pete建议的想法.如果我:
思考?
c# ×2
visual-c++ ×2
.net ×1
c ×1
dst ×1
exception ×1
file-io ×1
gcc ×1
legacy-code ×1
portability ×1
reflection ×1
timezone ×1
unit-testing ×1