Я работаю над проектом OS Pintos. Я получаю сообщение:Emacs - GDB отслеживает право прерывать, не перешагивая все файлы
Page fault at 0xbfffefe0: not present error writing page in user context.
Проблема с проектом Pintos ОС является то, что он не будет просто сказать линию и метод, который вызвал исключение.
Я знаю, как использовать точки останова/точки наблюдения и т. Д., Но есть ли способ сделать шаг к нему, не проходя через поток WHOLE и ВСЕ ОС-файлы по строкам, чтобы я мог перейти в строку, вызвавшую исключение, и установить точку останова там? Я посмотрел на команды GDB, но ничего не нашел.
Когда я отлаживаю этот проект, я должен пройти через всю программу, пока не найду ту ошибку/исключение, которое очень трудоемко. Вероятно, существует более быстрый способ сделать это.
Спасибо. Всего след:
[email protected]:~/Class/pintos/proj-3-bhling-nestilll-nsren/src/vm/build$ pintos -v -k -T 60 --qemu --gdb --filesys-size=2 -p tests/vm/pt-grow-pusha -a pt-grow-pusha --swap-size=4 -- -q -f run pt-grow-pusha
Use of literal control characters in variable names is deprecated at /home/nestilll/Class/pintos/src/utils/pintos line 909.
Prototype mismatch: sub main::SIGVTALRM() vs none at /home/nestilll/Class/pintos/src/utils/pintos line 933.
Constant subroutine SIGVTALRM redefined at /home/nestilll/Class/pintos/src/utils/pintos line 925.
warning: disabling timeout with --gdb
Copying tests/vm/pt-grow-pusha to scratch partition...
qemu -hda /tmp/N2JbACdqyV.dsk -m 4 -net none -nographic -s -S
PiLo hda1
Loading............
Kernel command line: -q -f extract run pt-grow-pusha
Pintos booting with 4,088 kB RAM...
382 pages available in kernel pool.
382 pages available in user pool.
Calibrating timer... 419,020,800 loops/s.
hda: 13,104 sectors (6 MB), model "QM00001", serial "QEMU HARDDISK"
hda1: 205 sectors (102 kB), Pintos OS kernel (20)
hda2: 4,096 sectors (2 MB), Pintos file system (21)
hda3: 98 sectors (49 kB), Pintos scratch (22)
hda4: 8,192 sectors (4 MB), Pintos swap (23)
filesys: using hda2
scratch: using hda3
swap: using hda4
Formatting file system...done.
Boot complete.
Extracting ustar archive from scratch device into file system...
Putting 'pt-grow-pusha' into the file system...
Erasing ustar archive...
Executing 'pt-grow-pusha':
(pt-grow-pusha) begin
Page fault at 0xbfffefe0: not present error writing page in user context.
pt-grow-pusha: dying due to interrupt 0x0e (#PF Page-Fault Exception).
Interrupt 0x0e (#PF Page-Fault Exception) at eip=0x804809c
cr2=bfffefe0 error=00000006
eax=bfffff8c ebx=00000000 ecx=0000000e edx=00000027
esi=00000000 edi=00000000 esp=bffff000 ebp=bfffffa8
cs=001b ds=0023 es=0023 ss=0023
pt-grow-pusha: exit(-1)
Execution of 'pt-grow-pusha' complete.
Timer: 71 ticks
Thread: 0 idle ticks, 63 kernel ticks, 8 user ticks
hda2 (filesys): 62 reads, 200 writes
hda3 (scratch): 97 reads, 2 writes
hda4 (swap): 0 reads, 0 writes
Console: 1359 characters output
Keyboard: 0 keys pressed
Exception: 1 page faults
Powering off...
Проблема в том, что я не знаю, где находится желаемое местоположение, пока я не начну с начала до конца до тех пор, пока не произойдет такое же исключение/ошибка. В других проектах, например, в простой Java, я могу прочитать трассировку стека для этого.В любом случае, чтобы сделать это для ОС Pintos? –
'gdb' имеет команду для отображения трассировки стека. Вы можете использовать 'bt' или' backtrace', чтобы отобразить обратную трассировку стека. – user3629249
Да, я тоже это использовал, не всегда полезно. Но спасибо за совет. –