对于我的iPhone项目中的断言宏,我正在寻找一种以编程方式进入调试器的方法.在Windows(MSVC++)上,我可以使用__debugbreak()来实现此目的.调用此函数将停止我的程序,启动调试器,并显示调用__debugbreak()的行的调用堆栈.
iPhone的__debugbreak()有什么类似的东西吗?我已经尝试过Debugger(),但这给了我一个链接器错误.
谢谢,克劳斯
当在Windows上使用Visual C++断言失败时,调试器会停止,显示消息,然后让您继续(或者,如果没有运行调试会话,则提供为您启动Visual Studio).
在Linux上,似乎assert()的默认行为是显示错误并退出程序.由于我的所有断言都通过宏,我试图使用信号来解决这个问题,比如
#define ASSERT(TEST) if(!(TEST)) raise(SIGSTOP);
Run Code Online (Sandbox Code Playgroud)
但是虽然GDB(通过KDevelop)停在正确的位置,但我似乎无法继续通过信号,并且在GDB内手动发送信号只会让我感到不知所措,无论是GDB还是调试过程都无法控制.
我有一个JUnit 4测试循环测试数据数组:
public @Test void testAll() {
final Object[][] sets = new Object[][] {
// SET TYPE VALUE
// --- valid sets
// groups
x(s(A,1, B,1, C,1), G),
x(s(A,4, B,4, D,4), G),
x(s(A,8, B,8, D,8, C,8), G),
x(s(J,J, B,4, D,4), G, 4*3),
x(s(A,9, J,J, D,9), G, 9*3),
x(s(A,2, B,2, C,2), G),
x(s(A,4, B,4, J,J), G, 4*3),
x(s(A,4, B,4, C,4, D,4), G),
// runs
x(s(A,1, A,2, A,3), R),
x(s(B,8, B,9, B,10), R),
x(s(J,J, C,2, C,3), R, 6),
x(s(D,8, D,9, J,J, D,11), …Run Code Online (Sandbox Code Playgroud) 我有一个非常糟糕的内存泄漏,我试图修复,但不知何故,我不能删除对象而不触发此断言.
我已经通过谷歌搜索了一个解决方案并已阅读有关此错误的有关stackoverflow的问题,但我仍然无法找到答案!
根据我的研究得到此错误的可能原因:
1.删除多个对象
2.阴影复制
3.创建和删除从外部dll加载的
对象4.创建对象而不存储指针
但是:
1.我检查了代码并且无法找到双重删除
2.我使用复制构造函数来复制对象
3.错误的关联类是构建(使用MS Visual Studio)到单独的lib而不是dll.并且与此错误相关的所有类都位于同一个lib中.
我检查了代码,看起来这不是问题
如果有人能够在下面的代码中发现错误,那将是很好的,我感谢每一个指示我解决问题的提示.
编辑:
我忘了在MessageSystem的sendThreadMain中提到相同的删除问题(参见下面的代码).如果我删除消息,它会在代码中的其他地方导致意外错误.可能只是错误的数据传输......但我真的不知道.
此代码在Windows和Linux上运行!
以下是代码的错误相关部分:
信息
class Message
{
public:
Message (char type, unsigned char id, unsigned short size)
{
mType = type;
mId = id;
mSize= size;
}
Message(const Message &o)
{
mType = o.mType;
mId = o.mId;
mSize = o.mSize;
}
char getType() const {return mType;};
unsigned char getId() const {return mId;};
unsigned short getSize() const {return mSize;};
protected:
char mType;
unsigned char mId; …Run Code Online (Sandbox Code Playgroud) 使用NUnit 2.6来判断两个集合长度相等而不管它们的元素值是什么,最恰当的方式是什么?
我可以看到表达这种断言的几种方式.哪一个是优选的,或者使用一个或另一个有缺点/优点?
Assert.That(coll1, Has.Count.EqualTo(coll2.Count));
Assert.That(coll1.Count, Is.EqualTo(coll2.Count));
Assert.AreEqual(coll1.Count, coll2.Count);
Run Code Online (Sandbox Code Playgroud)
我可以看到第一个选项提供了一个很好的输出,以防断言失败(预期计数...但实际上得到...),而其他两个选项只输出"Expected ...,actual ......"除非我通过附加参数提供自定义消息.
我想检查异步函数是否assert.throws从本机assert模块抛出使用.我试过了
const test = async () => await aPromise();
assert.throws(test); // AssertionError: Missing expected exception..
Run Code Online (Sandbox Code Playgroud)
它(obvioulsy?)不起作用,因为函数在Promise解析之前退出.然而我发现了这个问题,使用回调可以实现相同的目标.
有什么建议吗?
(我正在使用Babel转发到Node.js本机生成器)
通常,constexpr必须没有副作用.但是,我刚刚发现可以在抛出异常的构造函数中使用副作用.该技术可用于模拟constexpr函数的assert(),如下面的程序所示.
#include <iostream>
#include <cstdlib>
#include <stdexcept>
struct constexpr_precond_violated : std::logic_error
{
constexpr_precond_violated(const char* msg) :
std::logic_error(msg)
{
std::cerr << msg << '\n';
abort(); // to get a core dump
}
};
#define TO_STRING_IMPL(x) #x
#define TO_STRING(x) TO_STRING_IMPL(x)
#define CONSTEXPR_PRECOND(cond, value) \
((!(cond)) ? throw constexpr_precond_violated( \
"assertion: <" #cond "> failed (file: " \
__FILE__ ", line: " TO_STRING(__LINE__) ")") \
: (value))
constexpr int divide(int x, int y)
{
return CONSTEXPR_PRECOND(y != 0, x / y);
}
int …Run Code Online (Sandbox Code Playgroud) 我从来没有理解assert用过的东西,尽管我已经阅读了很多例子,但他们并没有真正让我知道我应该使用它的原因或原因.
所以,不要问一个例子,我会提供一个,让我知道这是否正确使用assert.
// The idea is that the `mode` variable should be 0 or 1, and no other number.
switch(mode) {
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
// assert code?
}
Run Code Online (Sandbox Code Playgroud)
如果这是正确的,请告诉我如何在这种情况下使用它.如果这不是它应该如何使用,请提供一个例子.
我正在阅读Swift电子书中的Assertions部分,看起来断言与Objective-C对应物的工作方式非常相似.但是,在作为生产应用程序运行时,我可以在文档中找不到任何关于运行时行为的信息.Objective-C NSAssert承诺永远不会因断言失败而终止生产应用程序.Swift中的情况是一样的吗?
我有这个代码
cy.get(element).should('contain.text', search_word || search_word.toLowerCase())
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
expected <div.games__element__title.card-title.h5> to contain text Hot, but the text was Ultimate hot
Run Code Online (Sandbox Code Playgroud)
如何使用 OR 运算符,以便我可以断言元素的文本包含以大写或小写字母书写的搜索词?
assert ×10
c++ ×3
java ×2
javascript ×2
unit-testing ×2
.net ×1
async-await ×1
c ×1
c++11 ×1
collections ×1
constexpr ×1
cypress ×1
debugging ×1
gdb ×1
ios ×1
iphone ×1
junit ×1
junit4 ×1
linux ×1
memory-leaks ×1
mocha.js ×1
node.js ×1
nunit ×1
objective-c ×1
swift ×1
xcode ×1