Поиск строки исходника по .dbg и стеку

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Поиск строки исходника по .dbg и стеку

Сообщение Flanter » 11.01.2010 11:22:18

Для уменьшения объема дистрибутива моей программы хочу вынести отладочную информацию в отдельный файл (ключом -Xg). Допустим, программа у пользователя упала и пользователь прислал мне такой дамп стека:

$0041F20B
$004B5034
$004E9FDF
$004EA4A5
$004EAA01
$004E9E7A
...

Собственно, вопрос: имея на руках файл .dbg от упавшей программы, могу ли я выяснить какая строчка соответствует каждому из адресов, чтобы потом найти её в исходнике? Попробовал разобраться с GDB, но сходу не смог понять, умеет ли он это или нет...
Flanter
новенький
 
Сообщения: 42
Зарегистрирован: 03.11.2007 22:15:54

Re: Поиск строки исходника по .dbg и стеку

Сообщение Max Rusov » 11.01.2010 15:24:51

Умеет.

info line *Addr
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Поиск строки исходника по .dbg и стеку

Сообщение Flanter » 11.01.2010 18:51:04

Спасибо! То, что понимает, это хорошо, но можно ли чуть подробнее, как использовать эту команду? Я пробовал набрать help info line, она мне выдала следующее:

Код: Выделить всё
Core addresses of the code for a source line.
Line can be specified as
  LINENUM, to list around that line in current file,
  FILE:LINENUM, to list around that line in that file,
  FUNCTION, to list around beginning of that function,
  FILE:FUNCTION, to distinguish among like-named static functions.
Default is to describe the last source line that was listed.

This sets the default address for "x" to the line's first instruction
so that "x/i" suffices to start examining the machine code.
The address is also stored as the value of "$_".

Если я правильно понял, тут решается обратная задача - по номеру строки возвращается её адрес. Можно пример, как правильно записать команду? Вот допустим я хочу узнать что за строчка находится по адресу $0041F20B (верхняя строчка из примера стека в первом моём сообщении). Как мне правильно сформулировать команду, чтобы узнать номер строки и исходный файл?
Flanter
новенький
 
Сообщения: 42
Зарегистрирован: 03.11.2007 22:15:54

Re: Поиск строки исходника по .dbg и стеку

Сообщение Max Rusov » 11.01.2010 19:17:56

Вот как я написал, так и надо сформулировать:

>info line *0x40B139FF
Line 1391 of "C:/SrcFAR2/MyPlugins/MixLib/MixStrings.pas"
starts at address 0x40b139ff <STRTOFILE+63>
and ends at 0x40b13a19 <STRTOFILE+89>.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Поиск строки исходника по .dbg и стеку

Сообщение Flanter » 11.01.2010 19:24:23

Спасибо огромное, теперь строка определяется отлично! :) Я просто протормозил, что $ надо поменять на 0x.
Flanter
новенький
 
Сообщения: 42
Зарегистрирован: 03.11.2007 22:15:54


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru