- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否可以在带有时间戳的断言失败时记录信息
Ví dụ
int a = 10
assert( a > 100 );
那么它将失败并像时间戳一样输出
2013-12-02 , 17:00:05 assert failed !! (a > 100) line : 22
Cảm ơn
câu trả lời hay nhất
khẳng định
是一个宏(它必须是一个,以提供 __ĐƯỜNG KẺ__
Và __TÀI LIỆU__
信息)。
您可以定义自己的。我会把它命名为其他名称,例如 tassert
出于可读性原因,可能像(未经测试的代码)
#ifdef NDEBUG
#define tassert(Cond) do {if (0 && (Cond)) {}; } while(0)
#khác
#define tassert_at(Cond,Fil,Lin) do { if ((Cond)) { \
time_t now##Lin = time(NULL); \
char tbuf##Lin [64]; struct tm tm##Lin; \
localtime_r(&now##Lin, &tm##Lin); \
strftime (tbuf##Lin, sizeof(tbuf##Lin), \
"%Y-%m-%d,%T", &tm##Lin); \
fprintf(stderr, "tassert %s failure: %s %s:%d\n", \
#Cond, tbuf##Lin, Fil, Lin); \
abort(); }} while(0)
#define tassert(Cond) tassert_at(Cond,__FILE__,__LINE__)
#endif /*NDEBUG*/
tôi đang sử dụng cpp concatenation ##
Và Lin
为了降低名称冲突的可能性,我正在使用 cpp stringification #
sử dụng Cond
制作一个字符串宏正式。 Cond
始终展开,以确保即使禁用 tassert
编译器也能捕获其中的语法错误与 NDEBUG
作为assert(3)
可以将上述宏中的大部分代码放在某个函数中,例如
void tassert_at_failure (const char* cond, const char* fil, int lin) {
timer_t now = time(NULL);
char tbuf[64]; struct tm tm;
localtime_r (&now, &tm);
strftime (tbuf, sizeof(tbuf), "%Y-%m-%d,%T", &tm);
fprintf (stderr, "tassert %s failure: %s %s:%d\n",
cond, tbuf, fil, lin);
abort();
}
然后定义(有点像
做的...)
#define tassert_at(Cond,Fil,Lin) do { if ((Cond)) { \
tassert_at_failure(#Cond, Fil, Lin); }} while(0)
但我不太喜欢这种方法,因为使用 gdb
进行调试有 hủy bỏ()
在宏中调用要容易得多(恕我直言,用于调试可执行文件的代码大小根本无关紧要;在宏中调用 hủy bỏ
hiện hữu gdb
内部更方便 - 缩短回溯并避免一个 down
命令.. .).如果你不想libc
便携性,只需使用最新的 GNU libc
您可以简单地重新定义 Glibc 特定的 __assert_fail
函数(参见内部
头文件)。 YMMV.
顺便说一句,在实际的 C++ 代码中我更喜欢使用 <<
用于类似断言的调试输出。这允许使用我自己的 operator <<
输出例程(如果你把它作为一个额外的宏参数)所以我在想(未经测试的代码!)
#define tassert_message_at(Cond,Out,Fil,Lin) \
do { if ((Cond)) { \
time_t now##Lin = time(NULL); \
char tbuf##Lin [64]; struct tm tm##Lin; \
localtime_r(&now##Lin, &tm##Lin); \
strftime (tbuf##Lin, sizeof(tbuf##Lin), \
"%Y-%m-%d,%T", &tm##Lin); \
std::clog << "assert " << #Cond << " failed " \
tbuf##Lin << " " << Fil << ":" << Lin \
<< Out << std::endl; \
abort (); } } while(0)
#define tassert_message(Cond,Out) \
tassert_message_at(Cond,Out,__FILE__,__LINE__)
然后我会使用 tassert_message(i>5,"i=" << i);
顺便说一句,你可能想使用 syslog(3)thay vì inf
trong của bạntassert_at
宏。
关于带时间戳的 C++ 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702852/
Đang chạy PostgreSQL (7.4 và 8.x) Tôi nghĩ cách này sẽ hoạt động nhưng giờ tôi đang gặp lỗi. Tôi có thể chạy truy vấn riêng lẻ và nó hoạt động tốt, nhưng nếu tôi sử dụng UNION hoặc UNION ALL thì nó sẽ báo lỗi. Lỗi này:
Tôi đang cố gắng tạo điều hướng cho ứng dụng của mình bằng cách sử dụng điều hướng ngăn kéo. Một trong những đoạn của tôi (HomeFragment) có ViewPager chứa 3 đoạn (Bundy Clock, Annou).
Lấy ví dụ về ứng dụng tôi đang làm: - Nó có một ngăn điều hướng với nhiều mục; có hai mục mà tôi quan tâm hiện tại, tôi sẽ gọi chúng là X và Y. Cả X và Y đều hiển thị lựa chọn đoạn chứa danh sách các phần tử x hoặc y khi được nhấp vào.
Tôi có một mảng hình dạng NumPy (370,275,210) và tôi muốn định hình lại nó thành (275,210,370). Làm cách nào để triển khai tính năng này bằng Python? 370 là số băng tần, 275 là số dòng và 210 là gói hình ảnh
Làm cách nào chúng ta có thể tương tác với UIViewController gốc (có các nút) bị chặn bởi UIViewController con. Rõ ràng các sự kiện chạm không thông qua đứa trẻ Nib. (cho phép tương tác người dùng) LƯU Ý: Tôi đang tải cả NI mặc định và NI tùy chỉnh
Tôi chưa quen với Jpa và tôi muốn thực thi quy trình, mã của tôi như sau chuỗi tĩnh cuối cùng PERSISTENCE_UNIT_NAME = "todos" riêng tư tĩnh;
Ưu điểm của việc chọn phiên bản GCE được liên kết với Google Cloud SQL qua GCE có cài đặt LAMP là gì? Tôi chắc chắn GCE có khả năng mở rộng, nhưng cơ sở dữ liệu mysql được cài đặt trên nó có khả năng mở rộng đến mức nào? sử dụng
Câu hỏi này đã có câu trả lời ở đây: Bộ thu giá trị so với bộ thu con trỏ (3 câu trả lời) Đã đóng 3 năm trước. Tôi mới làm quen với golang. Chỉ muốn hiểu 2 kiểu khai báo cho kiểu Calc
Tôi vô tình nhấn nhầm phím tắt và xuất hiện một dòng đứt quãng rất đẹp ở ngày tháng. Kiểu như # 23 tháng 6 năm 2010 ------------------ Có ai biết phím tắt được đề cập không? ? (Tôi làm việc trên máy mac!) trong
Tôi đang viết một biểu thức chính quy trong Scala val Regex = "^foo.*$".r Điều đó tốt, nhưng nếu tôi muốn làm thì sao var x = "foo" val Regex = s"""^$x.* $"" ".r Bây giờ chúng ta có
Các tài liệu XML sau đây có giống nhau về mặt kỹ thuật không? Câu trả lời hay nhất của James Dean 19 và: James Dean 19 Hai tài liệu này giống hệt nhau về mặt ngữ nghĩa. tại X
Tôi gặp sự cố khi chạy mô hình hồi quy tuyến tính mạnh mẽ (sử dụng rlm từ thư viện MASS) trên danh sách các khung dữ liệu. Ví dụ có thể tái tạo: var1 <- c(1:100) var2 <- var1*var1 df1 <- data.f
Được rồi, tôi có một bàn phím số tùy chỉnh hiển thị các số là 0,00 trong nhãn (numberField), bây giờ tôi cần nó hiển thị 0,00 USD. NSString *chữ số = sender.currentTitle;
Trong ứng dụng dựa trên tài liệu, sử dụng tệp XIB, hành vi khi một cửa sổ mới được tạo là: nó được định vị và thay đổi kích thước dựa trên vị trí của cửa sổ sự kiện cuối cùng. Nếu cửa sổ sự kiện cuối cùng vẫn hiển thị thì cửa sổ mới sẽ được xếp tầng để nó không hiển thị trực tiếp
Tôi muốn truy vấn bằng cách sử dụng các tham số như sau: SELECT * FROM MATABLE WHERE MT_ID IN (368134, 181956) Vì vậy, tôi xem xét SELECT * FROM MATABLE
Tôi đang gặp một số vấn đề về hiệu suất. Tôi có một bảng có khoảng 2 triệu hàng. TẠO BẢNG [dbo].[M8]( [M8_ID] [int] IDENTITY(1,1) NOT NULL,
Tôi gặp sự cố với chức năng gõ phím trong jquery. Tôi không biết tại sao chức năng nhấn phím không hoạt động. Tôi đã sử dụng đúng mã khóa. Trong hàm của mình có 2 mã chứa 2 phím sự kiện, nhấn một phím có nghĩa là (+) mã 107 và (
Mình muốn hiển thị dạng sóng âm thanh thì mình có mã này, nó nhận đầu vào âm thanh .raw và hiển thị dạng sóng âm thanh, nhưng khi đưa âm thanh .3gp, .mp3 vào thì bị nhiễu trắng, có ai giúp mình cách làm như yêu cầu không Được sử dụng với .3gp Chạy nó bằng âm thanh .3gp. Inp
Tôi không thể làm cho hàm stristr trả về true, tôi tin rằng điều này là do có ký tự $ trong tìm kiếm của tôi. Khi tôi làm: var_dump($nopricecart); giá trị $nopricecart đầy đủ là $0 và tôi nhận được
Nếu tôi có một vòng lặp như thế này: for(int i=0;i O(n) lần. Vì vậy, một số vòng lặp được thực thi O(n) lần. Nếu thực hiện điều gì đó là thời gian tuyến tính, thì độ phức tạp của đoạn mã là O( n ^2). Về thuật toán - với câu lệnh If
Tôi là một lập trình viên xuất sắc, rất giỏi!