Detecting errors in String operations
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 38/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- cpp
- Lĩnh vực
- api, embedded-iot
Hướng nghiên cứu
Issue cung cấp các ví dụ C++ trong setup(), wasteAlmostAllMemory() và returnLongString(), nhưng không nêu tên các tệp triển khai hoặc các bài kiểm thử. Hãy bắt đầu bằng việc xác định phần triển khai Arduino String và các đường dẫn được sử dụng cho phép nối, phép gán và các chuỗi được trả về. Hoàn thành có nghĩa là các kiểm tra lỗi được cung cấp luôn phát hiện lỗi một cách nhất quán mà không có đầu ra một phần hoặc controller bị crash, kèm theo độ bao phủ hồi quy.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Hello,
If a String creation fails it is possible to detect this error in the code, like:
String s = "abc";
if (!s) ... // error, out of heap or something ...
However the error detection doesn't work with String expressions:
#define howLarge 5000
String *strArray = new String [howLarge];
void wasteAlmostAllMemory () {
for (int i = 0; i < howLarge; i++) strArray [i] = " wasted memory ";
while (true)
for (int i = 0; i < howLarge; i++)
if (!strArray [i].concat (" more wasted memory "))
return;
}
String returnLongString () {
return "This is a long string, much longer than fits into free memory, although not right now.";
}
void setup () {
Serial.begin (115200);
String longString = returnLongString ();
Serial.printf ("Wasting memory, please wait ... ");
wasteAlmostAllMemory ();
Serial.printf ("memory successfuly wasted\n");
String resultString;
// 1.
resultString = longString;
if (!resultString)
Serial.printf ("Could not create a long String s.\n"); // error detected successfuly
else { Serial.print ("'"); Serial.print (resultString); Serial.println ("'"); }
// 2.
resultString = "ABC " + longString + " DEF";
if (!resultString)
Serial.printf ("Could not calculate a String s.\n"); // error goes by undetected
else { Serial.print ("'"); Serial.print (resultString); Serial.println ("'"); } // the output is: ' DEF'
// 3.
resultString = returnLongString (); // failure to create the return String crashes the controller
}
void loop () {
}
My proposal is that each string expression that contains string in "error state" result in string also in "error state", so success could be tested only once even after several String operations. Something like this:
String s = "abc";
for (int i = 1; i < 1000; i++)
s += s.substring (1, 1);
if (!s) ... // error
Thank you.
- Ngôn ngữ chính
- C++
- Star
- 306
- Fork
- 150
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của arduino/ArduinoCore-API
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 25/100
arduino/ArduinoCore-API#261 ·
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 30/100
arduino/ArduinoCore-API#256 ·
-
enhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
arduino/ArduinoCore-API#251 · 1 bình luận ·
-
enhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
arduino/ArduinoCore-API#250 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
arduino/ArduinoCore-API#249 ·
Tất cả issue của arduino/ArduinoCore-API
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
flutter-webrtc/flutter-webrtc#2206 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
Component: GLib
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
brave/brave-browser#59300 ·
-
Mute ydb/tests/functional/dstool/test_canonical_requests.py.Test.test_group_take_snapshot in main Đang mởai_reviewed
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
ydb-platform/ydb#53974 · 3 bình luận ·