我有一个使用读写锁的类.
我想看看我是否正确锁定并保护了所有方法.
是否有测试设计模式来检查锁是否设置正确?
编辑:
一些澄清:
它是从C++/CLI代码派生的C#代码,它具有C++级别的锁...不那么简单.这就是我正在寻找测试设计的原因,而不是设计如何锁定它.
多线程时需要检查一些事项:
没有死锁(最明显)
正确性(如果我在1个线程中更新它将在另一个中看到)
原子写(如果我在一个线程中写入,我将只能在写入完整值时读取)
公平性(可能是更多理论证明,如果我使用Mutex,应该是真的)
如果项目正在编译为lib,我如何检查编译?(静态库)
是否有某种静态断言或其他可以检查的标志?
我自己无法添加预处理器变量,因为它是一个将在整个公司的其他项目中使用的实用程序.所以我想知道是否有一些默认情况下正在发送的预处理器标志.
我正在使用Visual Studio 2010
我想将类成员函数的返回值存储在另一个类中.
这似乎有效:
class Foo
{
public:
Foo(int) {} //non default constructor that hides default constructor
unspecified_return_type get_value();
};
class Bar
{
// stores a value returned by Foo::get_value
decltype(Foo().get_value()) value;
};
Run Code Online (Sandbox Code Playgroud)
但是,有一个类Foo的默认构造函数的引用,在某些情况下可能没有定义.有没有办法在没有明确引用任何构造函数的情况下执行此操作?
我有一个在VS2005中编译的旧项目(可悲).它必须保留在VS2005中,以便它可以正确链接到另一个具有VS2005 CRT,MFC等的进程.
现在我需要使用旧的VS2005工具集在VS2015中编译这个项目.
我已将项目的VC++目录更改为所有STD和Windows SDK标头/库(包括目录,参考目录,库目录,源目录)的旧文件夹.
这个技巧曾经在使用VS2010时工作正常,但在VS2015上我遇到了一些奇怪的链接错误:
1>Project1.obj : error LNK2019: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" (??_M@YGXPAXIIP6EX0@Z@Z) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" (??_EPluginInterface@@UAEPAXI@Z)
1> 1>
1>StdAfx.obj : error LNK2001: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" (??_M@YGXPAXIIP6EX0@Z@Z)
1> 1>
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,unsigned int)" (??3@YAXPAXI@Z) referenced in function __unwindfunclet$?getInstance@Project1@@SAPAV1@XZ$0
1> …Run Code Online (Sandbox Code Playgroud) c++ linker visual-studio-2005 unresolved-external visual-studio-2015
我见过一些this在函数参数声明中使用关键字的代码.例如:
public static Object SomeMethod( this Object blah, bool blahblah)
Run Code Online (Sandbox Code Playgroud)
this在这种情况下,这个词意味着什么?
有没有办法将参数传递给setter?我如何将字符串传递给下面的setter?如何使用新的字符串参数调用setter?
public string It
{
get{ { return it;}
set { it = value;}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你
我一直在使用WinDbg调试转储文件一段时间.
有一个很好的"技巧"适用于x86本机程序,你可以扫描堆栈中的CONTEXT_ALL标志(0x1003f).
在x64中,CONTEXT_ALL标志显然不包含0x1003f ...
现在的问题是,有时当你将本机与托管代码混合时,常规的查找异常的方法(如.exc或.lastevent).
x64 中这个0x1003f的等价物是什么?有没有这样的常数?
编辑:
顺便说一句,如果你想知道,理论上它应该是10003f因为定义:
#define CONTEXT_I386 0x00010000
#define CONTEXT_AMD64 0x00100000
#define CONTEXT_CONTROL 0x00000001L // SS:SP, CS:IP, FLAGS, BP
#define CONTEXT_INTEGER 0x00000002L // AX, BX, CX, DX, SI, DI
#define CONTEXT_SEGMENTS 0x00000004L // DS, ES, FS, GS
#define CONTEXT_FLOATING_POINT 0x00000008L // 387 state
#define CONTEXT_DEBUG_REGISTERS 0x00000010L // DB 0-3,6,7
#define CONTEXT_EXTENDED_REGISTERS 0x00000020L // cpu specific extensions
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
#define CONTEXT_ALL …Run Code Online (Sandbox Code Playgroud) 我想知道你var什么时候应该使用?
C#中的几乎任何东西,除了可能是原语和一些更奇怪的情况,都来自Object.
那么使用那些实际类型不是更好的做法吗?或者至少object?
(我已经编程了一段时间,我的严格观点是那var是邪恶的)
我有一个对象列表:
array = [object0,object1,object2,object3,object4]
Run Code Online (Sandbox Code Playgroud)
我想改变给定排列的项目的顺序:
permutation = [ 2 , 4 , 0 , 1 , 3 ]
Run Code Online (Sandbox Code Playgroud)
在python中是否有一个命令可以执行以下操作:
result = Permute(array,permutation)
result = [object2,object4,object0,object1,object3]
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过一个简单的for循环来做到这一点....
我试图在托管非托管混合代码中找到实际的异常.
问题是我有一个.Net类捕获所有未处理的异常然后创建一个转储,所以当我查看转储时,存在混合的托管非托管代码,我无法真正得到实际的非托管异常.
更糟糕的是,.Net似乎有它自己的例外!分析-v给了我那个例外.
所以,这就是我所拥有的:
我可以找到发生异常的位置(通过查找1003f字),然后执行.cxr以获取代码中的实际位置.
当我做一个!dumpstack我得到类似的东西:
//My module stuff and then:
122bf71c 08bf5242 (MethodDesc 0x4bf71ac +0x5a <Module>.dbg.NativeExceptionHandler())
122bf734 08bf5242 (MethodDesc 0x4bf71ac +0x5a <Module>.dbg.NativeExceptionHandler())
122bf73c 08bf51ce (MethodDesc 0x4bf71dc +0x6 <Module>.dbg.OnUnhandledNativeException(_EXCEPTION_POINTERS*)), calling (MethodDesc 0x4bf71ac +0 <Module>.dbg.NativeExceptionHandler())
122bf75c 08bf51ce (MethodDesc 0x4bf71dc +0x6 <Module>.dbg.OnUnhandledNativeException(_EXCEPTION_POINTERS*)), calling (MethodDesc 0x4bf71ac +0 <Module>.dbg.NativeExceptionHandler())
122bf760 3944bf15 3944bf15
122bf778 7c35f0c3 msvcr71!__CxxUnhandledExceptionFilter+0x46, calling 091f15a2
122bf784 7c864191 kernel32!UnhandledExceptionFilter+0x1c7
122bf7ac 7c812afb kernel32!RaiseException+0x53, calling ntdll!RtlRaiseException
122bf7f4 7857df60 msvcr90!_CxxThrowException+0x48 [f:\prebuild\eh\throw.cpp:161], calling kernel32!RaiseException
122bf828 785436c5 msvcr90!__set_flsgetvalue+0xf [f:\src\tidtable.c:256], calling kernel32!TlsGetValue
122bf834 …Run Code Online (Sandbox Code Playgroud)