LINUX.ORG.RU

[и снова привет][для тех, у кого 64 битный проц] помогите пофиксить баг


0

1

http://github.com/inish777/hardinform Качаете, собираете и запускаете консольную часть программы(hardinform) c любым параметром (c,k,o,u). Баги в гуе фиксить НЕ НАДО, т.к. я почти переписал его на python. Заранее спасибо.

★★
Ответ на: комментарий от mopsene

Моя программулина, которая выводит информацию о софте и железе компа + бенчмарки(которых пока нет). Как hardinfo, Everest, AIDA64, Sandra.

netcat ★★
() автор топика

bash-4.2$ uname -p x86_64 bash-4.2$ ./hardinform -c CPU info CPU:0 Processor type:AuthenticAMD Model name:AMD Athlon(tm) II X2 240 Processor Current processor speed in MHz:800.000 Processor cache size:1024 KB Processor speed in Bogomips:5625.92 Temperature:32°C Critical temperature:0°C CPU:1 Processor type:AuthenticAMD Model name:AMD Athlon(tm) II X2 240 Processor Current processor speed in MHz:800.000 Processor cache size:1024 KB Processor speed in Bogomips:5625.23 Temperature:32°C Critical temperature:0°C

anonymous
()
Ответ на: комментарий от anonymous
bash-4.2$ uname -p
x86_64
bash-4.2$ ./hardinform -c
CPU info
	CPU:0
		Processor type:AuthenticAMD
		Model name:AMD Athlon(tm) II X2 240 Processor
		Current processor speed in MHz:800.000
		Processor cache size:1024 KB
		Processor speed in Bogomips:5625.92
		Temperature:32°C
		Critical temperature:0°C
	CPU:1
		Processor type:AuthenticAMD
		Model name:AMD Athlon(tm) II X2 240 Processor
		Current processor speed in MHz:800.000
		Processor cache size:1024 KB
		Processor speed in Bogomips:5625.23
		Temperature:32°C
		Critical temperature:0°C
anonymous
()
Ответ на: комментарий от anonymous

Странно. У меня самого x86, все работает, это snefjyent баг словил. Подождем, может у кого еще проявится.

netcat ★★
() автор топика
Ответ на: комментарий от netcat
$ uname -p
Celeron(R) Dual-Core CPU T3300 @ 2.00GHz

$ gdb -q --args hardinform -u
Reading symbols from /home/michael/dev/inish777-hardinform-8855db2/hardinform...done.
(gdb) r
Starting program: /home/michael/dev/inish777-hardinform-8855db2/hardinform -u
Users information

Program received signal SIGSEGV, Segmentation fault.
0x0000000000401c5e in users_list () at /home/michael/dev/inish777-hardinform-8855db2/src/core/users.c:38
38	      printf("\t%s:%s\n", "User", pwd->pw_name);
(gdb) backtrace 
#0  0x0000000000401c5e in users_list () at /home/michael/dev/inish777-hardinform-8855db2/src/core/users.c:38
#1  0x0000000000401c48 in users_info () at /home/michael/dev/inish777-hardinform-8855db2/src/core/users.c:25
#2  0x0000000000401dfd in main (argc=2, argv=0x7fffffffe468) at /home/michael/dev/inish777-hardinform-8855db2/src/core/main.c:45
(gdb) 
Deleted
()
Ответ на: комментарий от Deleted

Lets dancer with a buben

diff --git a/src/core/users.c b/src/core/users.c
index a7c2f2e..408ea6b 100644
--- a/src/core/users.c
+++ b/src/core/users.c
@@ -31,8 +31,8 @@ void users_info ()
 void users_list ()
 {
   struct passwd* pwd;
-  char ch_user_uid [MAXLEN];
-  char ch_user_gid [MAXLEN];
+  char ch_user_uid [MAXLEN * sizeof(char)];
+  char ch_user_gid [MAXLEN * sizeof(char)];
   while ((pwd = (struct passwd*)getpwent ()) != NULL)
     {
       printf("\t%s:%s\n", "User", pwd->pw_name);

А так работает?

netcat ★★
() автор топика
Program terminated with signal 11, Segmentation fault.
#0  0x0000000000401c5e in users_list () at /home/del/bugs/hardinform/hardinform/src/core/users.c:38
38	      printf("\t%s:%s\n", "User", pwd->pw_name);
(gdb) bt
#0  0x0000000000401c5e in users_list () at /home/del/bugs/hardinform/hardinform/src/core/users.c:38
#1  0x0000000000401c48 in users_info () at /home/del/bugs/hardinform/hardinform/src/core/users.c:25
#2  0x0000000000401dfd in main (argc=2, argv=0x7fff2331ee98) at /home/del/bugs/hardinform/hardinform/src/core/main.c:45

(gdb) b /home/del/bugs/hardinform/hardinform/src/core/users.c:38
Breakpoint 1 at 0x401c5a: file /home/del/bugs/hardinform/hardinform/src/core/users.c, line 38.
(gdb) set ar
architecture  args          
(gdb) set args -u
(gdb) r
Starting program: /home/del/bugs/hardinform/hardinform/hardinform -u
Users information

Breakpoint 1, users_list () at /home/del/bugs/hardinform/hardinform/src/core/users.c:38
38	      printf("\t%s:%s\n", "User", pwd->pw_name);
(gdb) L
33	  struct passwd* pwd;
34	  char ch_user_uid [MAXLEN];
35	  char ch_user_gid [MAXLEN];
36	  while ((pwd = (struct passwd*)getpwent ()) != NULL)
37	    {
38	      printf("\t%s:%s\n", "User", pwd->pw_name);
39	      sprintf (ch_user_uid, "%d", pwd->pw_uid); //convert UID from uid_t to char
40	      sprintf (ch_user_gid, "%d", pwd->pw_gid); //convert GID from gid_t to char
41	      printf("\t\t%s:%s\n", "UID",ch_user_uid);
42	      printf("\t\t%s:%s\n", "GID",ch_user_gid);
(gdb) p pwd
$1 = (struct passwd *) 0xfffffffff7bcae60
(gdb) p pwd->pw_name
Cannot access memory at address 0xfffffffff7bcae60

И ещё: под valgrind оно нормально отрабатывает и не падает.

Выводит:

	User:root
		UID:0
		GID:0
		Home directory:/root
		Shell:/bin/bash
		Comment:root
	User:bin
		UID:1

...
DELIRIUM ☆☆☆☆☆
()

Выхлоп gdb: http://pastebin.com/fVz8mdV8

Дефолтная гента, только ядро из calculate-linux.

PS. Для сборки вне дерева исходников вроде так надо:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ec5d44..aa00295 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,6 +4,6 @@ project (${PROJECT})
 include_directories (include/)
 set (CMAKE_C_FLAGS "-ggdb -Wall")
 add_definitions(-std=c99)
-configure_file(${CMAKE_BINARY_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h @ONLY)
-configure_file(${CMAKE_BINARY_DIR}/share/hardinform-gui.desktop.cmake ${CMAKE_BINARY_DIR}/share/hardinform-gui.desktop @ONLY)
+configure_file(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h @ONLY)
+configure_file(${CMAKE_SOURCE_DIR}/share/hardinform-gui.desktop.cmake ${CMAKE_BINARY_DIR}/share/hardinform-gui.desktop @ONLY)
 add_subdirectory(src)

shared_ptr
()
smake.sh -t main -i../../include -lsensors &>/dev/null && ./main -c | head
CPU info
	CPU:0
		Processor type:GenuineIntel
		Model name:Intel(R) Core(TM) i3 CPU       M 380  @ 2.53GHz
		Current processor speed in MHz:1466.000
		Processor cache size:3072 KB
		Processor speed in Bogomips:5306.83
		Temperature:44°C
		Critical temperature:93°C
backbone ★★★★★
()
Ответ на: комментарий от DELIRIUM

Есть какие-нибудь предположения? Чуть выше есть мой патч, проверь пожалуйста, вдруг с ним сработает.

netcat ★★
() автор топика
Ответ на: комментарий от anonymous

Да, есть такое. Если уж начал, скажи как правильно.

netcat ★★
() автор топика
Ответ на: комментарий от netcat

Не сработает: sizeof(char) всегда равен 1 по стандарту.

Предположение следующее: возможно, ты где-то ранее испортил память. Тк любые попытки обратиться к этой структуре приводят к сегфолту.

Аналогичный код у меня работает:

#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>

int main()
{
	struct passwd *p;
	while(p = getpwent())
	{
		printf("%s\n", p->pw_name);
	}
	endpwent();
	return 0;
}
[del@del-arch hardinform]$ gcc -o test -ggdb ./test.c
[del@del-arch hardinform]$ ./test 
root
bin
daemon
mail
ftp
http
nobody
dbus
del
avahi
postgres
usbmux

Может попозже ещё поковыряюсь.

DELIRIUM ☆☆☆☆☆
()

На выдаче пользовательской информации сегфолт.

$ ./hardinform -c
CPU info
        CPU:0
                Processor type:AuthenticAMD
                Model name:AMD FX(tm)-6100 Six-Core Processor             
                Current processor speed in MHz:1400.000
                Processor cache size:2048 KB
                Processor speed in Bogomips:6629.67
                Temperature:0°C
                Critical temperature:0°C
        CPU:1
                Processor type:AuthenticAMD
                Model name:AMD FX(tm)-6100 Six-Core Processor             
                Current processor speed in MHz:1400.000
                Processor cache size:2048 KB
                Processor speed in Bogomips:6628.55
                Temperature:0°C
                Critical temperature:0°C
        CPU:2
                Processor type:AuthenticAMD
                Model name:AMD FX(tm)-6100 Six-Core Processor             
                Current processor speed in MHz:1400.000
                Processor cache size:2048 KB
                Processor speed in Bogomips:6628.60
                Temperature:0°C
                Critical temperature:0°C
        CPU:3
                Processor type:AuthenticAMD
                Model name:AMD FX(tm)-6100 Six-Core Processor             
                Current processor speed in MHz:1400.000
                Processor cache size:2048 KB
                Processor speed in Bogomips:6628.60
                Temperature:0°C
                Critical temperature:0°C
        CPU:4
                Processor type:AuthenticAMD
                Model name:AMD FX(tm)-6100 Six-Core Processor             
                Current processor speed in MHz:1400.000
                Processor cache size:2048 KB
                Processor speed in Bogomips:6628.59
                Temperature:0°C
                Critical temperature:0°C
        CPU:5
                Processor type:AuthenticAMD
                Model name:AMD FX(tm)-6100 Six-Core Processor             
                Current processor speed in MHz:1400.000
                Processor cache size:2048 KB
                Processor speed in Bogomips:6628.62
                Temperature:0°C
                Critical temperature:0°C

$ ./hardinform -k
Kernel information
        Version:Linux 3.2.7-1.fc16.x86_64
        List of loaded modules:
        ...
$ ./hardinform -d
/dev/mem: Permission denied

 ./hardinform -u
Users information
Ошибка сегментирования (core dumped)

$ ./hardinform -o
OS information
        OS version:Fedora release 16 (Verne)
        Uptime:8h44m20s
Slavaz ★★★★★
()
Ответ на: комментарий от netcat

ТАДАМ!

[del@del-arch hardinform]$ gcc -std=c99 -ggdb test.c -o test
test.c: In function ‘f’:
test.c:8:2: warning: implicit declaration of function ‘getpwent’ [-Wimplicit-function-declaration]
test.c:8:10: warning: assignment makes pointer from integer without a cast [enabled by default]
test.c:12:2: warning: implicit declaration of function ‘endpwent’ [-Wimplicit-function-declaration]
[del@del-arch hardinform]$ ./test
Segmentation fault
[del@del-arch hardinform]$ gcc -ggdb test.c -o test
[del@del-arch hardinform]$ ./test
root
bin
daemon
mail
ftp
http
nobody
dbus
del
avahi
postgres
usbmux
[del@del-arch hardinform]$ 

Это происходит только с опцией std=c99

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от netcat

есть:

CMAKE_C_FLAGS "-ggdb -Wall -Wextra -pedantic"
[ 11%] Building C object src/CMakeFiles/hardinform.dir/core/os.c.o
[ 22%] Building C object src/CMakeFiles/hardinform.dir/core/users.c.o
/home/вася/inish777-hardinform-8855db2/src/core/users.c: In function ‘users_list’:
/home/вася/inish777-hardinform-8855db2/src/core/users.c:36:25: warning: implicit declaration of function ‘getpwent’ [-Wimplicit-function-declaration]
/home/вася/inish777-hardinform-8855db2/src/core/users.c:36:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
...
исправляй ворнинги

anonymous
()
Ответ на: комментарий от netcat

Например ЭТО:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ec5d44..587e987 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 2.6)
 set (PROJECT hardinform)
 project (${PROJECT})
 include_directories (include/)
-set (CMAKE_C_FLAGS "-ggdb -Wall")
+set (CMAKE_C_FLAGS "-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -ggdb -Wall")
 add_definitions(-std=c99)
 configure_file(${CMAKE_BINARY_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h @ONLY)
 configure_file(${CMAKE_BINARY_DIR}/share/hardinform-gui.desktop.cmake ${CMAKE_BINARY_DIR}/share/hardinform-gui.desktop @ONLY)

Исправляет падение. Но ты уж сам реши, какие макросы нужны тебе (смотри man getpwent() и хедера).

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от netcat

Всмысле WTF? Выше привёл я тебе пример патча, который исправляет это.

Очевидно, в режиме -std=c99 другой набор дефайнов, что делает объявления функций вроде getpwent() «не видимыми». (Мессаги об implicit declaration какбе намекают). Далее в строчке

pwd = getpwent(). Ты присваиваешь pwd рандомное число и соответственно пытаешься потом по этому адресу что-то читать. В результате кровь кишки асфальт.

DELIRIUM ☆☆☆☆☆
()

во первых, у тебя cmakelists кривой

CMake Error: File /home/user/source/hardinform/build/config.h.cmake does not exist.
CMake Error at CMakeLists.txt:7 (configure_file):
  configure_file Problem configuring file


CMake Error: File /home/user/source/hardinform/build/share/hardinform-gui.desktop.cmake does not exist.
CMake Error at CMakeLists.txt:8 (configure_file):
  configure_file Problem configuring file


-- Configuring incomplete, errors occurred!
Reset ★★★★★
()

Во-вторых, почисти ворнинги Вот это

/home/user/source/hardinform/src/core/users.c:36:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

может приводить к сегфолтам

Reset ★★★★★
()

procfs устарел, используй sysfs, а вообще посмотри на утилиту от интел, она выводит больше инфы про процессор

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.