From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Helmut Eller Newsgroups: gmane.emacs.devel Subject: Re: (How) can I position information backtraces? Date: Mon, 18 Sep 2017 23:53:19 +0200 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1505771617 18524 195.159.176.226 (18 Sep 2017 21:53:37 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 18 Sep 2017 21:53:37 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) Cc: Rocky Bernstein To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Sep 18 23:53:33 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1du3yu-0004cK-6T for ged-emacs-devel@m.gmane.org; Mon, 18 Sep 2017 23:53:32 +0200 Original-Received: from localhost ([::1]:39067 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1du3z1-0000yh-LG for ged-emacs-devel@m.gmane.org; Mon, 18 Sep 2017 17:53:39 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53599) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1du3yu-0000yS-VJ for emacs-devel@gnu.org; Mon, 18 Sep 2017 17:53:34 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1du3yq-0005s1-RL for emacs-devel@gnu.org; Mon, 18 Sep 2017 17:53:33 -0400 Original-Received: from [195.159.176.226] (port=42727 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1du3yq-0005r8-JZ for emacs-devel@gnu.org; Mon, 18 Sep 2017 17:53:28 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1du3yh-00046F-1j for emacs-devel@gnu.org; Mon, 18 Sep 2017 23:53:19 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 33 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:lWS+pXxniGQC277ssQcvP0wtE40= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:218495 Archived-At: On Mon, Sep 18 2017, Rocky Bernstein wrote: > I've been looking at Emacs Lisp code and the C source. I don't see > how/where execution position is stored. I suppose you want to know how Emacs stores the source position (filename and line number) of Lisp code and in particular how the debugger can take you from a stack frame in the backtrace to the source position. Emacs doesn't store such information in a nice uniform table -- sorry to disappoint you -- instead Emacs has a bunch of heuristics to guess/search the source position. One heuristic goes like this: first determine the filename by searching the name of the function in the list `load-history' or for subrs use the file etc/DOC. The line number is not stored anywhere and is usually determined by some regexp search in the source file. Those heuristics work quite well for "normal" code, but are too limited if lambdas or complex macros are involved. There is also no nice API for this. E.g. look at `elisp--xref-find-definitions' for the messy code that is needed for this kind of task. Ideally, the compiler/intepreter would generate source maps and attach them to functions/lambdas in some way. But it seems that the motivation for doing that (I guess it would be quite a big project) is limited, given that the current heuristics work good enough for the simple cases. Actually, the current approach works suprisingly well, considering how little information is kept around. Helmut