Subject: bug#79036: [PATCH] Fix pdb tracking for remote filenames

From: Michael Albinus <[email-masked]>
Date: Thu, 17 Jul 2025 15:44:52 +0200

Liu Hui <[email-masked]> writes:

 Hi,

>> > Because file-name may be not the actual file. file-name is actually
>> > extracted from the pdb output in the python shell, e.g.
>> >
>> >     >>> f()
>> >     > /ssh:server:/tmp/test.py(3)f()
>> >     (Pdb)
>> >
>> > Generally, pdb shows local file names. But if we send the code using
>> > C-c C-c from python buffers (i.e. step 3), python-send-string passes
>> > (buffer-file-name), which may be a remote file name, to python
>> > process. Therefore, pdb may also shows remote file names.
>>
>> This is an error. python-send-string shall send (file-local-name (buffer-file-name)) .
>
> Why is it an error? In python-shell-send-string, (buffer-file-name) is
> finally passed to python's compile function in __PYTHON_EL_eval or
> __PYTHON_EL_eval_file, and is just used for run-time error messages
> according to the docstring.
>
>    The filename argument should give the file from which the code was
>    read; pass some recognizable value if it wasn’t read from a file
>    ('<string>' is commonly used).
>
> I think it is suitable to use a remote filename or even buffer name as
> long as it helps Emacs find the source.

This bug report is about an inconsistenccy in pdb. Sometimes it shows
absolute file names which should be interpreted as remote file
names. Sometimes, the file names are already prefixed with the remote
identification.

If python-shell-send-string does not use remote file names, your patch
isn't needed. The existing code

--8<---------------cut here---------------start------------->8---
  (let* ((file-name-prospect (concat (file-remote-p default-directory)
                              file-name))
--8<---------------cut here---------------end--------------->8---

would be OK.

Best regards, Michael.