GDB: недействительный актерLinux

Ответить
Anonymous
 GDB: недействительный актер

Сообщение Anonymous »

Я работаю над программой C , чтобы добавить условные точки останова или распечатать некоторые значения. But when I use some expressions, the gdb failed with Invalid cast.

[*]OS: Ubuntu 24.04.1 LTS
[*]GCC: gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
GDB: GNU gdb (Ubuntu 15.0.50.20240403-0Ubuntu1) 15.0.50.20240403-git < /li>
Glibc: ubuntu glibc 2.39-0Ubuntu8.4 < /li>
< /ul>
вот мой код: < /p>

. PrettyPrint-Override ">#include
#include

int main(){
const char *i = "a";
const char *j = "b";
int c = strcmp(i, j);
printf("i: %s\n", i);
printf("j: %s\n", j);
printf("c: %d\n", c);
}
< /code>
Вот несколько примеров: < /p>

Compile < /li>
< /ol>
gcc -g3 test.c -o test
gdb ./test
< /code>

Условная точка останова: сбой с недопустимым составом < /code>: < /li>
< /ol>
(gdb) b 8 if ((int) strcmp(i, "a") == 0) && ((int) strcmp(i, "b") == 0)
Breakpoint 1 at 0x11a1: file test.c, line 8.
(gdb) run
Starting program: /home/xxx/work/osd/hwk89/test

This GDB supports auto-downloading debuginfo from the following URLs:

Enable debuginfod for this session? (y or [n])
Debuginfod has been disabled.
To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Error in testing condition for breakpoint 1:
Invalid cast.

Breakpoint 1, main () at test.c:8
8 printf("i: %s\n", i);

< /code>

print: некоторые примеры не сняты с недопустимым составом < /code>: < /li>
< /ol>
(gdb) b 8
(gdb) run
Starting program: /home/xuancheng/work/osd/hwk89/test

This GDB supports auto-downloading debuginfo from the following URLs:

Enable debuginfod for this session? (y or [n])
Debuginfod has been disabled.
To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main () at test.c:8
8 printf("i: %s\n", i);

(gdb) p (int) strcmp(i, "a")
$1 = 0
(gdb) p (int) strcmp(i, "b")
$2 = -1
(gdb) p (int) strcmp(i, "a") && (int) strcmp(i, "b")
Invalid cast.
(gdb) p (int) strcmp(i, "a") && -1
$3 = 0
(gdb) p 0 && (int) strcmp(i, "b")
Invalid cast.
(gdb) p 0 && 1
$4 = 0
(gdb) p (int) 0 && (int) 1
$5 = 0
(gdb) p ((int) strcmp(i, "a")) && ((int) strcmp(i, "b"))
Invalid cast.
(gdb) p (((int) strcmp(i, "a")) && ((int) strcmp(i, "b")))
Invalid cast.
(gdb) p (int) strcmp(i, "a") == 0 && (int) strcmp(i, "b") == 0
Invalid cast.
(gdb) p ((int) strcmp(i, "a") == 0) && ((int) strcmp(i, "b") == 0)
Invalid cast.
(gdb) p (((int) strcmp(i, "a") == 0) && ((int) strcmp(i, "b") == 0))
Invalid cast.


Подробнее здесь: https://stackoverflow.com/questions/795 ... -operators
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»