Попытка установить условную точку останова для остановки при заданном c значении строки.
Следующий набор команд, которые я пробовал:
Установить 1:
(gdb) b file.C:97 if strcmp(pName, "abc") == 0
набор 2:
(gdb) b file.C:97
(gdb) cond 1 !strcmp(pName, "abc")
набор 3:
(gdb) b file.C:97
(gdb) set $str = "abc"
(gdb) cond 1 strcmp (pName, $str) == 0
Оба эти завершение ошибки сегментации в STL strcmp
:
Continuing.
Detaching after fork from child process 12742.
Detaching after fork from child process 12818.
Detaching after fork from child process 12819.
FUSION: detected debugger running, not catching non-fusion exceptions
Program received signal SIGSEGV, Segmentation fault.
__strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp.S:260
Error in testing breakpoint condition:
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on".
Evaluation of the expression containing the function
(__strcmp_sse42) will be abandoned.
When the function is done executing, GDB will silently stop.
Breakpoint 1, __strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp.S:260
/usr/src/debug/glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S:260:7925:beg:0x32f912871a
Использование find()
не заканчивается ошибкой сегментации, но точка останова останавливается без применения условия:
(gdb) b file.C:97
(gdb) set $str = "abc"
(gdb) cond 1 pName.find($str) == 0
Эти вышеупомянутые команды, которые я пробовал GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-47.el6
Если я попытаюсь GNU gdb (GDB) 8.1.90.20180726-git
, это заканчивается новой проблемой.
Хотя pName
определяется как строка,
Я получаю следующее после остановки отладчика в точке останова (без условия с помощью strcmp()
):
(gdb) print pName
4: (string)pName = {static npos = <optimized out>, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x2aebca8 "xyz"}}
Вкл. GDB 7.6.1-47.el6
, после применения простой точки останова (без каких-либо условий), печатать только pName дает 'xyz'
.
Можно ли сделать то же самое в GDB 8.1.90.20180726
?
В любом случае, пожалуйста, предложите мне способ поставить условие brea kpoint на строку успешно!