diff mbox series

[v2,2/5] devtool: code: Add source mapping for debug source files

Message ID 20240219165525.714512-3-enguerrand.de-ribaucourt@savoirfairelinux.com
State New
Headers show
Series devtool: ide: Improve VSCode support | expand

Commit Message

Enguerrand de Ribaucourt Feb. 19, 2024, 4:55 p.m. UTC
When launching the debug configuration, the source files from the debug
rootfs were openened in the editor instead of the local workspace files.
We add an exception to properly map them to the file being developed and
compiled by the IDE integration. This also more closely matches what the
user would expect compared to native development.

This is also true for the devtool fallback mode.

Signed-off-by: Enguerrand de Ribaucourt <enguerrand.de-ribaucourt@savoirfairelinux.com>
---
 scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
 scripts/lib/devtool/ide_sdk.py              | 1 +
 2 files changed, 2 insertions(+)

Comments

Adrian Freihofer Feb. 20, 2024, 9:01 a.m. UTC | #1
On Mon, 2024-02-19 at 17:55 +0100, Enguerrand de Ribaucourt wrote:
> When launching the debug configuration, the source files from the
> debug
> rootfs were openened in the editor instead of the local workspace
> files.
> We add an exception to properly map them to the file being developed
> and
> compiled by the IDE integration. This also more closely matches what
> the
> user would expect compared to native development.
> 
> This is also true for the devtool fallback mode.

This looks still wrong to me. If files from the rootfs are openend for
a recipe which is in the workspace, the SDK is broken and we need to
understand and fix that. This patch does not solve that, but will make
it much harder to find the right solution for this issue.

Adrian

> 
> Signed-off-by: Enguerrand de Ribaucourt
> <enguerrand.de-ribaucourt@savoirfairelinux.com>
> ---
>  scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
>  scripts/lib/devtool/ide_sdk.py              | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py
> b/scripts/lib/devtool/ide_plugins/ide_code.py
> index b2193130d2e..c063b7d0590 100644
> --- a/scripts/lib/devtool/ide_plugins/ide_code.py
> +++ b/scripts/lib/devtool/ide_plugins/ide_code.py
> @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase):
>          if gdb_cross_config.image_recipe.rootfs_dbg:
>              launch_config['additionalSOLibSearchPath'] =
> modified_recipe.solib_search_path_str(
>                  gdb_cross_config.image_recipe)
> +            src_file_map[os.path.join("/usr/src/debug",
> modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}"
>              src_file_map["/usr/src/debug"] = os.path.join(
>                  gdb_cross_config.image_recipe.rootfs_dbg, "usr",
> "src", "debug")
>          else:
> diff --git a/scripts/lib/devtool/ide_sdk.py
> b/scripts/lib/devtool/ide_sdk.py
> index 14679744807..f292edbe25c 100755
> --- a/scripts/lib/devtool/ide_sdk.py
> +++ b/scripts/lib/devtool/ide_sdk.py
> @@ -356,6 +356,7 @@ class RecipeModified:
>              'PACKAGE_DEBUG_SPLIT_STYLE')
>          self.path = recipe_d.getVar('PATH')
>          self.pn = recipe_d.getVar('PN')
> +        self.pv = recipe_d.getVar('PV')
>          self.recipe_sysroot = os.path.realpath(
>              recipe_d.getVar('RECIPE_SYSROOT'))
>          self.recipe_sysroot_native = os.path.realpath(
Enguerrand de Ribaucourt Feb. 21, 2024, 2:12 p.m. UTC | #2
On 20/02/2024 10:01, adrian.freihofer@gmail.com wrote:
> On Mon, 2024-02-19 at 17:55 +0100, Enguerrand de Ribaucourt wrote:
>> When launching the debug configuration, the source files from the
>> debug
>> rootfs were openened in the editor instead of the local workspace
>> files.
>> We add an exception to properly map them to the file being developed
>> and
>> compiled by the IDE integration. This also more closely matches what
>> the
>> user would expect compared to native development.
>>
>> This is also true for the devtool fallback mode.
> 
> This looks still wrong to me. If files from the rootfs are openend for
> a recipe which is in the workspace, the SDK is broken and we need to
> understand and fix that. This patch does not solve that, but will make
> it much harder to find the right solution for this issue.
Hi Adrian,

This is affecting essentially the devtool fallback mode. Since it's 
compiled through devtool, it's using the bitbake packaging information.

Steps to reproduce:
  - devtool modify powertop (autotools recipe, currently fallback)
  - devtool ide-sdk powertop [args...]
  - open the powertop sources workspace
  - run the debug launch configuration
  - initial breakpoint opens the rootfs-dbg main.cpp instead of the 
current workspace

This probably will get fixed for autotools with your specific class 
support, but will remain for the fallback mode.

Do we want to keep this source map, but only for the fallback mode? Like 
you say, it's kinda "cheating" the debug information, but since we are 
in fallback mode, the devtool packaging is supposed to be using the 
sources from the workspace, so it's more like "hinting" at the proper 
source.
> 
> Adrian
> 
>>
>> Signed-off-by: Enguerrand de Ribaucourt
>> <enguerrand.de-ribaucourt@savoirfairelinux.com>
>> ---
>>   scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
>>   scripts/lib/devtool/ide_sdk.py              | 1 +
>>   2 files changed, 2 insertions(+)
>>
>> diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py
>> b/scripts/lib/devtool/ide_plugins/ide_code.py
>> index b2193130d2e..c063b7d0590 100644
>> --- a/scripts/lib/devtool/ide_plugins/ide_code.py
>> +++ b/scripts/lib/devtool/ide_plugins/ide_code.py
>> @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase):
>>           if gdb_cross_config.image_recipe.rootfs_dbg:
>>               launch_config['additionalSOLibSearchPath'] =
>> modified_recipe.solib_search_path_str(
>>                   gdb_cross_config.image_recipe)
>> +            src_file_map[os.path.join("/usr/src/debug",
>> modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}"
>>               src_file_map["/usr/src/debug"] = os.path.join(
>>                   gdb_cross_config.image_recipe.rootfs_dbg, "usr",
>> "src", "debug")
>>           else:
>> diff --git a/scripts/lib/devtool/ide_sdk.py
>> b/scripts/lib/devtool/ide_sdk.py
>> index 14679744807..f292edbe25c 100755
>> --- a/scripts/lib/devtool/ide_sdk.py
>> +++ b/scripts/lib/devtool/ide_sdk.py
>> @@ -356,6 +356,7 @@ class RecipeModified:
>>               'PACKAGE_DEBUG_SPLIT_STYLE')
>>           self.path = recipe_d.getVar('PATH')
>>           self.pn = recipe_d.getVar('PN')
>> +        self.pv = recipe_d.getVar('PV')
>>           self.recipe_sysroot = os.path.realpath(
>>               recipe_d.getVar('RECIPE_SYSROOT'))
>>           self.recipe_sysroot_native = os.path.realpath(
> 
Enguerrand de Ribaucourt
Enguerrand de Ribaucourt Feb. 21, 2024, 2:56 p.m. UTC | #3
On 21/02/2024 15:12, Enguerrand de Ribaucourt wrote:
> 
> 
> On 20/02/2024 10:01, adrian.freihofer@gmail.com wrote:
>> On Mon, 2024-02-19 at 17:55 +0100, Enguerrand de Ribaucourt wrote:
>>> When launching the debug configuration, the source files from the
>>> debug
>>> rootfs were openened in the editor instead of the local workspace
>>> files.
>>> We add an exception to properly map them to the file being developed
>>> and
>>> compiled by the IDE integration. This also more closely matches what
>>> the
>>> user would expect compared to native development.
>>>
>>> This is also true for the devtool fallback mode.
>>
>> This looks still wrong to me. If files from the rootfs are openend for
>> a recipe which is in the workspace, the SDK is broken and we need to
>> understand and fix that. This patch does not solve that, but will make
>> it much harder to find the right solution for this issue.
> Hi Adrian,
> 
> This is affecting essentially the devtool fallback mode. Since it's 
> compiled through devtool, it's using the bitbake packaging information.
> 
> Steps to reproduce:
>   - devtool modify powertop (autotools recipe, currently fallback)
>   - devtool ide-sdk powertop [args...]
>   - open the powertop sources workspace
>   - run the debug launch configuration
>   - initial breakpoint opens the rootfs-dbg main.cpp instead of the 
> current workspace
> 
> This probably will get fixed for autotools with your specific class 
> support, but will remain for the fallback mode.
> 
> Do we want to keep this source map, but only for the fallback mode? Like 
> you say, it's kinda "cheating" the debug information, but since we are 
> in fallback mode, the devtool packaging is supposed to be using the 
> sources from the workspace, so it's more like "hinting" at the proper 
> source.
It also affects more meson projects like lighttpd. The "hint" would 
still be valid given how it's built and deployed now. If you are still 
working on an alternative tinfoil deploy method, maybe it's not affected.
>>
>> Adrian
>>
>>>
>>> Signed-off-by: Enguerrand de Ribaucourt
>>> <enguerrand.de-ribaucourt@savoirfairelinux.com>
>>> ---
>>>   scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
>>>   scripts/lib/devtool/ide_sdk.py              | 1 +
>>>   2 files changed, 2 insertions(+)
>>>
>>> diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py
>>> b/scripts/lib/devtool/ide_plugins/ide_code.py
>>> index b2193130d2e..c063b7d0590 100644
>>> --- a/scripts/lib/devtool/ide_plugins/ide_code.py
>>> +++ b/scripts/lib/devtool/ide_plugins/ide_code.py
>>> @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase):
>>>           if gdb_cross_config.image_recipe.rootfs_dbg:
>>>               launch_config['additionalSOLibSearchPath'] =
>>> modified_recipe.solib_search_path_str(
>>>                   gdb_cross_config.image_recipe)
>>> +            src_file_map[os.path.join("/usr/src/debug",
>>> modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}"
>>>               src_file_map["/usr/src/debug"] = os.path.join(
>>>                   gdb_cross_config.image_recipe.rootfs_dbg, "usr",
>>> "src", "debug")
>>>           else:
>>> diff --git a/scripts/lib/devtool/ide_sdk.py
>>> b/scripts/lib/devtool/ide_sdk.py
>>> index 14679744807..f292edbe25c 100755
>>> --- a/scripts/lib/devtool/ide_sdk.py
>>> +++ b/scripts/lib/devtool/ide_sdk.py
>>> @@ -356,6 +356,7 @@ class RecipeModified:
>>>               'PACKAGE_DEBUG_SPLIT_STYLE')
>>>           self.path = recipe_d.getVar('PATH')
>>>           self.pn = recipe_d.getVar('PN')
>>> +        self.pv = recipe_d.getVar('PV')
>>>           self.recipe_sysroot = os.path.realpath(
>>>               recipe_d.getVar('RECIPE_SYSROOT'))
>>>           self.recipe_sysroot_native = os.path.realpath(
>>
> Enguerrand de Ribaucourt
> 
Enguerrand de Ribaucourt
Adrian Freihofer Feb. 22, 2024, 1 p.m. UTC | #4
On Wed, 2024-02-21 at 15:56 +0100, Enguerrand de Ribaucourt wrote:
> 
> 
> On 21/02/2024 15:12, Enguerrand de Ribaucourt wrote:
> > 
> > 
> > On 20/02/2024 10:01, adrian.freihofer@gmail.com wrote:
> > > On Mon, 2024-02-19 at 17:55 +0100, Enguerrand de Ribaucourt
> > > wrote:
> > > > When launching the debug configuration, the source files from
> > > > the
> > > > debug
> > > > rootfs were openened in the editor instead of the local
> > > > workspace
> > > > files.
> > > > We add an exception to properly map them to the file being
> > > > developed
> > > > and
> > > > compiled by the IDE integration. This also more closely matches
> > > > what
> > > > the
> > > > user would expect compared to native development.
> > > > 
> > > > This is also true for the devtool fallback mode.
> > > 
> > > This looks still wrong to me. If files from the rootfs are
> > > openend for
> > > a recipe which is in the workspace, the SDK is broken and we need
> > > to
> > > understand and fix that. This patch does not solve that, but will
> > > make
> > > it much harder to find the right solution for this issue.
> > Hi Adrian,
> > 
> > This is affecting essentially the devtool fallback mode. Since it's
> > compiled through devtool, it's using the bitbake packaging
> > information.
> > 
> > Steps to reproduce:
> >   - devtool modify powertop (autotools recipe, currently fallback)
> >   - devtool ide-sdk powertop [args...]
> >   - open the powertop sources workspace
> >   - run the debug launch configuration
> >   - initial breakpoint opens the rootfs-dbg main.cpp instead of the
> > current workspace
> > 
> > This probably will get fixed for autotools with your specific class
> > support, but will remain for the fallback mode.
> > 
> > Do we want to keep this source map, but only for the fallback mode?
> > Like 
> > you say, it's kinda "cheating" the debug information, but since we
> > are 
> > in fallback mode, the devtool packaging is supposed to be using the
> > sources from the workspace, so it's more like "hinting" at the
> > proper 
> > source.
> It also affects more meson projects like lighttpd. The "hint" would 
> still be valid given how it's built and deployed now. If you are
> still 
> working on an alternative tinfoil deploy method, maybe it's not
> affected.

It looks like the devtool deploy-target step is missing. If you debug
packaged files this would behave like this. It's important to over
write the packaged files with the not packaged file from the image
folder. This is what the devtool deploy-target command does. It's
expected that this just happens, probably there is a bug in the
dependencies. Could you please try to run it explicit? Something like
this:

- devtool modify powertop (autotools recipe, currently fallback)
- devtool ide-sdk powertop [args...]

- devtool build powertop
- devtool deploy-target powertop

- open the powertop sources workspace
- run the debug launch configuration

I guess this would work as expected. The question is then: Why is the
deploy not executed?

Adrian


> > > 
> > > Adrian
> > > 
> > > > 
> > > > Signed-off-by: Enguerrand de Ribaucourt
> > > > <enguerrand.de-ribaucourt@savoirfairelinux.com>
> > > > ---
> > > >   scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
> > > >   scripts/lib/devtool/ide_sdk.py              | 1 +
> > > >   2 files changed, 2 insertions(+)
> > > > 
> > > > diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > b/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > index b2193130d2e..c063b7d0590 100644
> > > > --- a/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > +++ b/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase):
> > > >           if gdb_cross_config.image_recipe.rootfs_dbg:
> > > >               launch_config['additionalSOLibSearchPath'] =
> > > > modified_recipe.solib_search_path_str(
> > > >                   gdb_cross_config.image_recipe)
> > > > +            src_file_map[os.path.join("/usr/src/debug",
> > > > modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}"
> > > >               src_file_map["/usr/src/debug"] = os.path.join(
> > > >                   gdb_cross_config.image_recipe.rootfs_dbg,
> > > > "usr",
> > > > "src", "debug")
> > > >           else:
> > > > diff --git a/scripts/lib/devtool/ide_sdk.py
> > > > b/scripts/lib/devtool/ide_sdk.py
> > > > index 14679744807..f292edbe25c 100755
> > > > --- a/scripts/lib/devtool/ide_sdk.py
> > > > +++ b/scripts/lib/devtool/ide_sdk.py
> > > > @@ -356,6 +356,7 @@ class RecipeModified:
> > > >               'PACKAGE_DEBUG_SPLIT_STYLE')
> > > >           self.path = recipe_d.getVar('PATH')
> > > >           self.pn = recipe_d.getVar('PN')
> > > > +        self.pv = recipe_d.getVar('PV')
> > > >           self.recipe_sysroot = os.path.realpath(
> > > >               recipe_d.getVar('RECIPE_SYSROOT'))
> > > >           self.recipe_sysroot_native = os.path.realpath(
> > > 
> > Enguerrand de Ribaucourt
> > 
> Enguerrand de Ribaucourt
Enguerrand de Ribaucourt Feb. 22, 2024, 3:51 p.m. UTC | #5
On 22/02/2024 14:00, adrian.freihofer@gmail.com wrote:
> On Wed, 2024-02-21 at 15:56 +0100, Enguerrand de Ribaucourt wrote:
>>
>>
>> On 21/02/2024 15:12, Enguerrand de Ribaucourt wrote:
>>>
>>>
>>> On 20/02/2024 10:01, adrian.freihofer@gmail.com wrote:
>>>> On Mon, 2024-02-19 at 17:55 +0100, Enguerrand de Ribaucourt
>>>> wrote:
>>>>> When launching the debug configuration, the source files from
>>>>> the
>>>>> debug
>>>>> rootfs were openened in the editor instead of the local
>>>>> workspace
>>>>> files.
>>>>> We add an exception to properly map them to the file being
>>>>> developed
>>>>> and
>>>>> compiled by the IDE integration. This also more closely matches
>>>>> what
>>>>> the
>>>>> user would expect compared to native development.
>>>>>
>>>>> This is also true for the devtool fallback mode.
>>>>
>>>> This looks still wrong to me. If files from the rootfs are
>>>> openend for
>>>> a recipe which is in the workspace, the SDK is broken and we need
>>>> to
>>>> understand and fix that. This patch does not solve that, but will
>>>> make
>>>> it much harder to find the right solution for this issue.
>>> Hi Adrian,
>>>
>>> This is affecting essentially the devtool fallback mode. Since it's
>>> compiled through devtool, it's using the bitbake packaging
>>> information.
>>>
>>> Steps to reproduce:
>>>    - devtool modify powertop (autotools recipe, currently fallback)
>>>    - devtool ide-sdk powertop [args...]
>>>    - open the powertop sources workspace
>>>    - run the debug launch configuration
>>>    - initial breakpoint opens the rootfs-dbg main.cpp instead of the
>>> current workspace
>>>
>>> This probably will get fixed for autotools with your specific class
>>> support, but will remain for the fallback mode.
>>>
>>> Do we want to keep this source map, but only for the fallback mode?
>>> Like
>>> you say, it's kinda "cheating" the debug information, but since we
>>> are
>>> in fallback mode, the devtool packaging is supposed to be using the
>>> sources from the workspace, so it's more like "hinting" at the
>>> proper
>>> source.
>> It also affects more meson projects like lighttpd. The "hint" would
>> still be valid given how it's built and deployed now. If you are
>> still
>> working on an alternative tinfoil deploy method, maybe it's not
>> affected.
> 
> It looks like the devtool deploy-target step is missing. If you debug
> packaged files this would behave like this. It's important to over
> write the packaged files with the not packaged file from the image
> folder. This is what the devtool deploy-target command does. It's
> expected that this just happens, probably there is a bug in the
> dependencies. Could you please try to run it explicit? Something like
> this:
> 
> - devtool modify powertop (autotools recipe, currently fallback)
> - devtool ide-sdk powertop [args...]
> 
> - devtool build powertop
> - devtool deploy-target powertop
> 
> - open the powertop sources workspace
> - run the debug launch configuration
> 
> I guess this would work as expected. The question is then: Why is the
> deploy not executed?
The deploy-target is actually executed automatically through the launch 
configuration. I also get the same result if I deploy manually. I 
believe that the problem is rather how "devtool build" compiles and 
packages the binary.
> 
> Adrian
> 
> 
>>>>
>>>> Adrian
>>>>
>>>>>
>>>>> Signed-off-by: Enguerrand de Ribaucourt
>>>>> <enguerrand.de-ribaucourt@savoirfairelinux.com>
>>>>> ---
>>>>>    scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
>>>>>    scripts/lib/devtool/ide_sdk.py              | 1 +
>>>>>    2 files changed, 2 insertions(+)
>>>>>
>>>>> diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py
>>>>> b/scripts/lib/devtool/ide_plugins/ide_code.py
>>>>> index b2193130d2e..c063b7d0590 100644
>>>>> --- a/scripts/lib/devtool/ide_plugins/ide_code.py
>>>>> +++ b/scripts/lib/devtool/ide_plugins/ide_code.py
>>>>> @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase):
>>>>>            if gdb_cross_config.image_recipe.rootfs_dbg:
>>>>>                launch_config['additionalSOLibSearchPath'] =
>>>>> modified_recipe.solib_search_path_str(
>>>>>                    gdb_cross_config.image_recipe)
>>>>> +            src_file_map[os.path.join("/usr/src/debug",
>>>>> modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}"
>>>>>                src_file_map["/usr/src/debug"] = os.path.join(
>>>>>                    gdb_cross_config.image_recipe.rootfs_dbg,
>>>>> "usr",
>>>>> "src", "debug")
>>>>>            else:
>>>>> diff --git a/scripts/lib/devtool/ide_sdk.py
>>>>> b/scripts/lib/devtool/ide_sdk.py
>>>>> index 14679744807..f292edbe25c 100755
>>>>> --- a/scripts/lib/devtool/ide_sdk.py
>>>>> +++ b/scripts/lib/devtool/ide_sdk.py
>>>>> @@ -356,6 +356,7 @@ class RecipeModified:
>>>>>                'PACKAGE_DEBUG_SPLIT_STYLE')
>>>>>            self.path = recipe_d.getVar('PATH')
>>>>>            self.pn = recipe_d.getVar('PN')
>>>>> +        self.pv = recipe_d.getVar('PV')
>>>>>            self.recipe_sysroot = os.path.realpath(
>>>>>                recipe_d.getVar('RECIPE_SYSROOT'))
>>>>>            self.recipe_sysroot_native = os.path.realpath(
>>>>
>>> Enguerrand de Ribaucourt
>>>
>> Enguerrand de Ribaucourt
> 

Enguerrand de Ribaucourt
Adrian Freihofer Feb. 25, 2024, 8:52 p.m. UTC | #6
On Thu, 2024-02-22 at 16:51 +0100, Enguerrand de Ribaucourt wrote:
> 
> 
> On 22/02/2024 14:00, adrian.freihofer@gmail.com wrote:
> > On Wed, 2024-02-21 at 15:56 +0100, Enguerrand de Ribaucourt wrote:
> > > 
> > > 
> > > On 21/02/2024 15:12, Enguerrand de Ribaucourt wrote:
> > > > 
> > > > 
> > > > On 20/02/2024 10:01, adrian.freihofer@gmail.com wrote:
> > > > > On Mon, 2024-02-19 at 17:55 +0100, Enguerrand de Ribaucourt
> > > > > wrote:
> > > > > > When launching the debug configuration, the source files
> > > > > > from
> > > > > > the
> > > > > > debug
> > > > > > rootfs were openened in the editor instead of the local
> > > > > > workspace
> > > > > > files.
> > > > > > We add an exception to properly map them to the file being
> > > > > > developed
> > > > > > and
> > > > > > compiled by the IDE integration. This also more closely
> > > > > > matches
> > > > > > what
> > > > > > the
> > > > > > user would expect compared to native development.
> > > > > > 
> > > > > > This is also true for the devtool fallback mode.
> > > > > 
> > > > > This looks still wrong to me. If files from the rootfs are
> > > > > openend for
> > > > > a recipe which is in the workspace, the SDK is broken and we
> > > > > need
> > > > > to
> > > > > understand and fix that. This patch does not solve that, but
> > > > > will
> > > > > make
> > > > > it much harder to find the right solution for this issue.
> > > > Hi Adrian,
> > > > 
> > > > This is affecting essentially the devtool fallback mode. Since
> > > > it's
> > > > compiled through devtool, it's using the bitbake packaging
> > > > information.
> > > > 
> > > > Steps to reproduce:
> > > >    - devtool modify powertop (autotools recipe, currently
> > > > fallback)
> > > >    - devtool ide-sdk powertop [args...]
> > > >    - open the powertop sources workspace
> > > >    - run the debug launch configuration
> > > >    - initial breakpoint opens the rootfs-dbg main.cpp instead
> > > > of the
> > > > current workspace
> > > > 
> > > > This probably will get fixed for autotools with your specific
> > > > class
> > > > support, but will remain for the fallback mode.
> > > > 
> > > > Do we want to keep this source map, but only for the fallback
> > > > mode?
> > > > Like
> > > > you say, it's kinda "cheating" the debug information, but since
> > > > we
> > > > are
> > > > in fallback mode, the devtool packaging is supposed to be using
> > > > the
> > > > sources from the workspace, so it's more like "hinting" at the
> > > > proper
> > > > source.
> > > It also affects more meson projects like lighttpd. The "hint"
> > > would
> > > still be valid given how it's built and deployed now. If you are
> > > still
> > > working on an alternative tinfoil deploy method, maybe it's not
> > > affected.
> > 
> > It looks like the devtool deploy-target step is missing. If you
> > debug
> > packaged files this would behave like this. It's important to over
> > write the packaged files with the not packaged file from the image
> > folder. This is what the devtool deploy-target command does. It's
> > expected that this just happens, probably there is a bug in the
> > dependencies. Could you please try to run it explicit? Something
> > like
> > this:
> > 
> > - devtool modify powertop (autotools recipe, currently fallback)
> > - devtool ide-sdk powertop [args...]
> > 
> > - devtool build powertop
> > - devtool deploy-target powertop
> > 
> > - open the powertop sources workspace
> > - run the debug launch configuration
> > 
> > I guess this would work as expected. The question is then: Why is
> > the
> > deploy not executed?
> The deploy-target is actually executed automatically through the
> launch 
> configuration. I also get the same result if I deploy manually. I 
> believe that the problem is rather how "devtool build" compiles and 
> packages the binary.

You are right. We need this additional source mapping. I found some
time to look into the details. I propose to go with these 4 patches
(including your patch as well):
https://lists.openembedded.org/g/openembedded-core/message/196146

Adrian

> > 
> > Adrian
> > 
> > 
> > > > > 
> > > > > Adrian
> > > > > 
> > > > > > 
> > > > > > Signed-off-by: Enguerrand de Ribaucourt
> > > > > > <enguerrand.de-ribaucourt@savoirfairelinux.com>
> > > > > > ---
> > > > > >    scripts/lib/devtool/ide_plugins/ide_code.py | 1 +
> > > > > >    scripts/lib/devtool/ide_sdk.py              | 1 +
> > > > > >    2 files changed, 2 insertions(+)
> > > > > > 
> > > > > > diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > > > b/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > > > index b2193130d2e..c063b7d0590 100644
> > > > > > --- a/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > > > +++ b/scripts/lib/devtool/ide_plugins/ide_code.py
> > > > > > @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase):
> > > > > >            if gdb_cross_config.image_recipe.rootfs_dbg:
> > > > > >                launch_config['additionalSOLibSearchPath'] =
> > > > > > modified_recipe.solib_search_path_str(
> > > > > >                    gdb_cross_config.image_recipe)
> > > > > > +            src_file_map[os.path.join("/usr/src/debug",
> > > > > > modified_recipe.pn, modified_recipe.pv)] =
> > > > > > "${workspaceFolder}"
> > > > > >                src_file_map["/usr/src/debug"] =
> > > > > > os.path.join(
> > > > > >                   
> > > > > > gdb_cross_config.image_recipe.rootfs_dbg,
> > > > > > "usr",
> > > > > > "src", "debug")
> > > > > >            else:
> > > > > > diff --git a/scripts/lib/devtool/ide_sdk.py
> > > > > > b/scripts/lib/devtool/ide_sdk.py
> > > > > > index 14679744807..f292edbe25c 100755
> > > > > > --- a/scripts/lib/devtool/ide_sdk.py
> > > > > > +++ b/scripts/lib/devtool/ide_sdk.py
> > > > > > @@ -356,6 +356,7 @@ class RecipeModified:
> > > > > >                'PACKAGE_DEBUG_SPLIT_STYLE')
> > > > > >            self.path = recipe_d.getVar('PATH')
> > > > > >            self.pn = recipe_d.getVar('PN')
> > > > > > +        self.pv = recipe_d.getVar('PV')
> > > > > >            self.recipe_sysroot = os.path.realpath(
> > > > > >                recipe_d.getVar('RECIPE_SYSROOT'))
> > > > > >            self.recipe_sysroot_native = os.path.realpath(
> > > > > 
> > > > Enguerrand de Ribaucourt
> > > > 
> > > Enguerrand de Ribaucourt
> > 
> 
> Enguerrand de Ribaucourt
diff mbox series

Patch

diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py
index b2193130d2e..c063b7d0590 100644
--- a/scripts/lib/devtool/ide_plugins/ide_code.py
+++ b/scripts/lib/devtool/ide_plugins/ide_code.py
@@ -234,6 +234,7 @@  class IdeVSCode(IdeBase):
         if gdb_cross_config.image_recipe.rootfs_dbg:
             launch_config['additionalSOLibSearchPath'] = modified_recipe.solib_search_path_str(
                 gdb_cross_config.image_recipe)
+            src_file_map[os.path.join("/usr/src/debug", modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}"
             src_file_map["/usr/src/debug"] = os.path.join(
                 gdb_cross_config.image_recipe.rootfs_dbg, "usr", "src", "debug")
         else:
diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py
index 14679744807..f292edbe25c 100755
--- a/scripts/lib/devtool/ide_sdk.py
+++ b/scripts/lib/devtool/ide_sdk.py
@@ -356,6 +356,7 @@  class RecipeModified:
             'PACKAGE_DEBUG_SPLIT_STYLE')
         self.path = recipe_d.getVar('PATH')
         self.pn = recipe_d.getVar('PN')
+        self.pv = recipe_d.getVar('PV')
         self.recipe_sysroot = os.path.realpath(
             recipe_d.getVar('RECIPE_SYSROOT'))
         self.recipe_sysroot_native = os.path.realpath(