小编Yoc*_*mer的帖子

多线程锁测试

我有一个使用读写锁的类.

我想看看我是否正确锁定并保护了所有方法.
是否有测试设计模式来检查锁是否设置正确?

编辑:
一些澄清:

它是从C++/CLI代码派生的C#代码,它具有C++级别的锁...不那么简单.这就是我正在寻找测试设计的原因,而不是设计如何锁定它.

多线程时需要检查一些事项:

没有死锁(最明显)
正确性(如果我在1个线程中更新它将在另一个中看到)
原子写(如果我在一个线程中写入,我将只能在写入完整值时读取)
公平性(可能是更多理论证明,如果我使用Mutex,应该是真的)

c# multithreading design-patterns locking

7
推荐指数
1
解决办法
1983
查看次数

编译检查是否编译为静态库

如果项目正在编译为lib,我如何检查编译?(静态库)

是否有某种静态断言或其他可以检查的标志?

我自己无法添加预处理器变量,因为它是一个将在整个公司的其他项目中使用的实用程序.所以我想知道是否有一些默认情况下正在发送的预处理器标志.

我正在使用Visual Studio 2010

c++ compilation static-libraries visual-studio-2010

7
推荐指数
1
解决办法
5909
查看次数

类方法类型的decltype

我想将类成员函数的返回值存储在另一个类中.

这似乎有效:

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的默认构造函数的引用,在某些情况下可能没有定义.有没有办法在没有明确引用任何构造函数的情况下执行此操作?

c++ decltype

7
推荐指数
2
解决办法
2332
查看次数

尝试针对旧STD库和Windows SDK进行编译时链接错误

我有一个在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

7
推荐指数
1
解决办法
1439
查看次数

静态方法声明中"this"是什么意思?

我见过一些this在函数参数声明中使用关键字的代码.例如:

public static Object SomeMethod( this Object blah, bool blahblah)
Run Code Online (Sandbox Code Playgroud)

this在这种情况下,这个词意味着什么?

.net c# methods syntax extension-methods

6
推荐指数
1
解决办法
2177
查看次数

有没有办法将参数传递给setter

有没有办法将参数传递给setter?我如何将字符串传递给下面的setter?如何使用新的字符串参数调用setter?

public string It
{
   get{ { return it;}

   set { it = value;}
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你

c#

6
推荐指数
2
解决办法
1万
查看次数

如何在x64堆栈中找到本机异常?

我一直在使用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)

debugging 64-bit windbg exception

5
推荐指数
1
解决办法
1156
查看次数

我何时应该使用"var"而不是"object"?

我想知道你var什么时候应该使用?

C#中的几乎任何东西,除了可能是原语和一些更奇怪的情况,都来自Object.

那么使用那些实际类型不是更好的做法吗?或者至少object

(我已经编程了一段时间,我的严格观点是那var是邪恶的)

c# syntax var

4
推荐指数
3
解决办法
5862
查看次数

如何获得索引的排列?

我有一个对象列表:

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循环来做到这一点....

python arrays permutation

4
推荐指数
1
解决办法
4088
查看次数

WinDBG - 查找实际(非托管)异常

我试图在托管非托管混合代码中找到实际的异常.

问题是我有一个.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)

debugging windbg exception

4
推荐指数
1
解决办法
1万
查看次数