Странная ошибка, с которой я никогда раньше не сталкивался в С ++, кто-нибудь знает, что это значит? - PullRequest
0 голосов
/ 18 апреля 2010

Я не буду публиковать какой-либо код, потому что слишком много, что может иметь отношение Но когда я запускаю свою программу, она печатает

Internal Bad Op Name!
: Success

Кто-нибудь знает, что это значит? Я использую g ++ для компиляции своего кода, и нигде в моем коде я не могу ничего даже близко приблизить к чему-то подобному. Я не знаю, откуда это. Кроме того, какие-либо предложения, чтобы выяснить, откуда в коде это происходит, может быть, с помощью gdb как-то сделать это?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 18 апреля 2010

Это не сообщение, которое я видел, и поиск в Google не показывает ничего явно связанного.

Вы можете определить, откуда это происходит, проходя через программу с помощью gdb, пока не появится сообщение. В качестве альтернативы можно добавить некоторые временные задержки, операторы «Я здесь» или вводные запросы для обнаружения подозрительных частей логики.


<<<(edit)>>>

Чтобы использовать gdb, сначала обязательно скомпилируйте и свяжите с отладочными символами. Используя gcc или g ++, просто добавьте -g в командную строку. Также часто бывает полезно исключить какие-либо оптимизации компилятора, поскольку иногда они могут сделать переход по программе не интуитивным.

[wally@lf ~]$ gdb program
GNU gdb Fedora (6.8-32.fc10)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
(gdb) break main
Breakpoint 1 at 0x8048c3c: file rtpsim.cpp, line 30.
(gdb) run
Starting program: ~/program 

Breakpoint 1, main () at rtpsim.cpp:30
30      rtp_io (&obj, INIT_CYCLE);
(gdb) next
31      printf ("- - - - - init complete - - - - -\n");
(gdb)     <---- pressed "enter" to repeat last command
- - - - - init complete - - - - -
33      for (int j = 0;  j < 10;  ++j)
(gdb) 
35          sleep (1);
(gdb) 
36          rtp_io (&obj, SCAN_CYCLE);
(gdb) 
37          printf ("- - - - - scan %d complete - - - - -\n", j+1);
  ...
1 голос
/ 18 апреля 2010

Чтобы отладить программу с помощью GDB, сначала убедитесь, что она скомпилирована с флагом -g. Затем введите gdb your-program-name в командной строке. GDB - это командный отладчик. Для начала введите help. Или есть графические средства отладки, такие как xxgdb (хотя для этого полезно понимать базовые команды gdb), ddd, kdbg (на основе KDE), Eclipse (это не так просто настроить, если вы хотите использовать собственный make-файл) и т. д.

1 голос
/ 18 апреля 2010

Какие библиотеки и какую платформу вы используете? Никакой компилятор C ++, о котором я знаю (конечно, не GCC), не вводит вывод в вашу программу, кроме как перед прерыванием.

Редактировать: может быть, проще, чем возврат или поиск ссылок, используйте grep -a, чтобы найти эту строку во всех ваших источниках и двоичных файлах библиотеки.

...